0%

JDBC

API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

import java.sql.DriverManager

//1.注册驱动(Mysql5 之后可以不写,利用jar的META-INF/services/java.sql.Driver文件驱动类)
Class.forName("com.mysql.jdbc.Driver")//该类static块调用 DriverManager.resisterDriver方法
/**2 获取连接 如果是本机且端口为3306则可url和port部分省略,为 jdbc:mysql:///${databsename}?参数键值对(eg:useSSL=true).
* 此时不能显式设置useSSL=false,否则会出异常,因为账号密码连接就是ssl连接,默认为true
* useServerPrepStmts=true,则开启sql预编译功能
* **/

val connect = DriverManager.getConnection("jdbc:mysql://${url:port}/${databsename}[?参数键值对1&参数键值对2..]","root","password")

/**
* Connection.setAutoCommit() 对应sql: set @@autocommit;
* Connection.commit() 对应sql: commit;
* Connection.rollback() 对应sql: rollback;
* createStatement() 普通执行sql对象
* prepareStatement(sql) 预编译SQL的执行sql对象:防止SQL注入
* prepareCall(sql) 执行存储过程的对象
* **/
//3.创建执行sql对象并执行
val prepareStatement = connect.prepareStatement("sql 带问好号的语句")
val result = prepareStatement.apply{
setXXX(1,xxx)
}.executeQuery() //executeUpdate() 更新操作可用于DDL或DML,DQL的结果是ResultSet需要close释放
//4.处理结果
while (result.next()){
println("${result.getString(1)}")//getXXX 均支持列index 或 列名2种方式
}
//5.释放资源
result.close()
prepareStatement.close()
connect.close()


连接远程报错问题

如果连接远端 Mysql报 - Host ‘xxx.xx.x.x‘ is not allowed to connect to this MySQL server,这是数据库操作权限问题,可以通过

1
2
3
4
mysql -u root -proot 
mysql> use mysql;
mysql> update user set host = '%' where user = 'root';
mysql> flush privileges;