连接JDBC的使用(在使用传统的失败后采用的做法)

JDBC的使用

今天废了5个小时,彻底知道了了指定服务器如果发生错,另外的解决办法

//1分参指定
        MysqlDataSource md=new MysqlDataSource();
        md.setServerName("127.0.0.1");
        md.setPort(3306);
        md.setUser("root");
        md.setPassword("H@139849t");
        md.setDatabaseName("user_manage");
        md.setCharacterEncoding("UTF-8");
        md.setUseSSL(false);
        md.setServerTimezone("Asia/shanghai");
        md.setURL("jdbc:mysql://127.0.0.1:3306/user_manage");
 //2,使用url 指定
        MysqlDataSource mysqlDataSource=new MysqlDataSource();
        mysqlDataSource.setURL("jdbc:mysql://localhost:3306/user_manage?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/shanghai");
        System.out.println(mysqlDataSource.getURL());
        mysqlDataSource.setUser("root");
        mysqlDataSource.setPassword("H@13984994357t");

这是我想要实现的全部代码:


import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.*;
import java.util.Scanner;

public class JdbcDemo {

    public static void main(String[] args) throws Exception {
        //指定服务器
        //1分参指定
        MysqlDataSource md=new MysqlDataSource();
        md.setServerName("127.0.0.1");
        md.setPort(3306);
        md.setUser("root");
        md.setPassword("H@13984994357t");
        md.setDatabaseName("user_manage");
        md.setCharacterEncoding("UTF-8");
        md.setUseSSL(false);
        md.setServerTimezone("Asia/shanghai");
        md.setURL("jdbc:mysql://127.0.0.1:3306/user_manage");
        System.out.println(md.getURL());
        //2,使用url 指定
       /* MysqlDataSource mysqlDataSource=new MysqlDataSource();
        mysqlDataSource.setURL("jdbc:mysql://localhost:3306/user_manage?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/shanghai");
        System.out.println(mysqlDataSource.getURL());
        mysqlDataSource.setUser("root");
        mysqlDataSource.setPassword("H@13984994357t");*/
        //3尽量使用接口而不是实际类
        //获取数据源
        DataSource dataSource=new MysqlDataSource();

        Scanner scanner=new Scanner(System.in);
        String usernameInput=scanner.nextLine();
        String passwordInput=scanner.nextLine();

        //获取连接对象从dataSource中(背后发了网络连接)
        try(Connection connection=dataSource.getConnection()){
            String sql="insert into users (username,password) values (?, ?)";
            //从connection中,创建要执行SQL操作;
            //需要得到自增id=
            try(PreparedStatement ps=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS)){
                //为动态参数进行绑定
                ps.setString(1,usernameInput);
                ps.setString(2,passwordInput);

                //due to not return result ,execute executeUpdata;
                ps.executeUpdate();

                //hope get uid auto_increase list;
                try(ResultSet rs=ps.getGeneratedKeys()){
                    if(rs.next()){
                        //这一定有一行,除非上面的executeUpdate() error
                        int uid=rs.getInt(1);
                        System.out.println("插入后uid的主建等于"+uid);
                    }else{

                    }
                }
            }
        }

    }
}

遇到的第一个错误是:Access denied for user ‘86139’@‘localhost’ (using password: NO)
意思是没有输入密码不能进入

Exception in thread "main" java.sql.SQLException: Access denied for user '86139'@'localhost' (using password: NO)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
	at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:416)
	at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:128)
	at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:113)
	at JdbcDemo.main(JdbcDemo.java:39)

解决办法是在:

//获取连接对象从dataSource中(背后发了网络连接)
        try(Connection connection=dataSource.getConnection("root","mima")){
            String sql="insert into users (username,password) values (?, ?)";
dataSource.getConnection(String name,String password)//将用户在里加入;

弄好这个后又有下面这个错误;

遇到的第二个错误是:No database selected
没有选择数据库

Exception in thread "main" java.sql.SQLException: No database selected
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1061)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1009)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1320)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:994)
	at JdbcDemo.main(JdbcDemo.java:49)

解决办法

 //获取连接对象从dataSource中(背后发了网络连接)
        try(Connection connection=dataSource.getConnection()){
            String sql="insert into user_manage.users (username,password) values (?, ?)";
String sql="insert into users (username,password) values (?, ?)";//在表的前面加上库名.

就解决问题;
总结;用这两种方法后上面分参指定 和URL指定没有用,我出现错误的原因也是 分参指定 和URL指定没有用的上,具体原因可能是我的环境有问题,这两种写法没有问题,由以上原因的可以采用我这种方式去连接数据库;
1,获取数据源
2,连接数据库
3,执行语句
4,关闭连接(connection,ps rs,例子中还没有关闭)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值