JDBC概念:JDBC是使用Java语言操作关系型数据库的一套API(Java DataBase Connectivity) Java数据库连接
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
mysql驱动:MySQL对于JDBC的实现类
JDBC本质是(sun公司定义的)一套操作所有关系型数据库的规则,即接口,各个数据库厂商去实现这套接口,提供数据库驱动jar包
(使用JDBC编程,真正执行的是驱动jar包中的实现类)
JDBC优点:
各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发(各公司都有一套驱动);
可以随时替换底层数据库,访问数据库的Java代码基本不变
JDBC连接:
创建项目:
①new project->创建一个空项目
②导入时,在project中更改jdk版本(如1.8 version 1.8.0_121)
③编译版本也相应改变(8 - Lambdas,type annotations etc.)
④apply->ok
⑤File->Project Structure->Modules->+ ->new module->点击创建一个java的工程->起名,回车->apply,ok
⑥在模块中创建目录(new directory),导入驱动jar包,复制jar包粘上去
⑦粘贴后点右键-> add as library,将第二个选项进行更改,上面意思一次是,全局有效、当前工程有效、模块有效
实现一个简单的sql语句执行:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JDBCDemo {
public static void main(String[] args) throws Exception {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");//jar包中的META.INF中的services中的java.sqlDriver记录了驱动名称,因此此行代码可省略
//获取连接
String url = "jdbc::mysql://127.0.0.1:3306/db1";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
//定义sql语句
String sql = "update account set money = 11000 where id = 1";
//获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
//执行sql语句
int count = stmt.executeUpdate(sql); //受影响的行数
//处理结果
System.out.println(count);
//释放资源
stmt.close();
conn.close();
}
}
可能存在的问题:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:917)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2332)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:795)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at com.test.JDBCTest.main(JDBCTest.java:22)
Caused by: java.lang.NullPointerException
at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3005)
at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1916)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1845)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1215)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2255)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286)
... 13 more
Exception in thread "main" java.lang.NullPointerException
at com.test.JDBCTest.main(JDBCTest.java:43)
使用Navicat for mysql 连接没有问题,但一用项目连接就出现上面错误,造成这个错误的主要原因是安装的是mysql8.0版本,而项目使用的驱动包是5.1版本,将项目驱动版本改成8.0.11成功解决了此问题
mysql驱动下载地址:https://dev.mysql.com/downloads/connector/j/
网友评论