概念就不说了,本篇主要是将将操作
java.sql这个包就是所有jdbc的API
在此之前先上一个原生的JDBC基本操作(包括执行SQL语句)然后再细说:
public class ConnectionClass {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Integer selid = input.nextInt();
String url = "jdbc:mysql://localhost:3306/user?characterEncoding=utf8";
String user = "root";
String password = "";
Connection conn = null;
Statement st = null;
try {
// --驱动
Class.forName("com.mysql.jdbc.Driver");
// --获取连接对象
conn = DriverManager.getConnection(url, user, password);
// --sql语句
String sql = null;
// 增DML
sql = "INSERT INTO user_rights(user_id,user_name,user_right) VALUES(1013,'卢本伟',2)";
// 删DML
sql = "DELETE FROM user_rights WHERE user_name='LBW'";
// 查DQL
sql = "SELECT * FROM user_rights WHERE user_id='001' AND user_name='梁非凡'";
System.out.println(sql);
// 改DML
sql = "UPDATE user_rights SET user_right=2 WHERE id=6";
// --声明sql语句
st = conn.createStatement();
// --执行sql语句
int row = st.executeUpdate(sql);// 执行DML or DLL语句用Update,返回成功的行数
ResultSet result = st.executeQuery(sql);// 执行DQL语句用Query,返回结果集
while (result.next()) {
int user_id = result.getInt("user_id");
String user_name = result.getString("user_name");
System.out.println(user_id + " " + user_name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// --释放资源
if (st != null) {
try {
st.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
}
}
既然是JDBC,服务器与数据库连接、传输数据的方法,那首先就是:
- 连接数据库
- 首先是加载驱动
不同的数据库对应不同的驱动,所谓驱动就是指驱动jar包,就是普通的jar包
如:MySQL的mysql-connector-java-5.1.X-bin.jar
就是添加个jar包而已,没什么好说的 - 创建连接
- 查看驱动相关api
ctrl+shift+t 查找drive
点进去后, 要求关联源码,把驱动压缩包直接关联- 加载驱动
把com.mysql.jdbc.Driver这份字节码加载进JVM
当一份字节码被加载到JVM时,就会执行该字节码中的静态代码块Class.forName("com.mysql.jdbc.Driver");
- 获取连接对象
?characterEncoding=utf8"这个是申明编码,一般都要加上的String url = "jdbc:mysql://localhost:3306/user?characterEncoding=utf8"; String user = "root"; String pwd = ""; Connection conn = DriverManager.getConnection(url, user, pwd);
- DML&DDL操作
DML和DDL操作执行方式都是一样的,只是sql语句不通罢了,因为本质上都是对数据库进行修改
//编写一个sql(DML或DDL)语句
String sql = "";
// --声明sql语句
st = conn.createStatement();
int row = st.executeUpdate(sql);// 执行DML or DLL语句用Update,返回成功的行数
方法 executeUpate(String) 执行DML和DDL语句
DML和DDL语句就不再陈述(那是数据库学习的东西)
- DQL操作
//编写一个sql(DQL)语句
String sql = "";
// --声明sql语句
st = conn.createStatement();
ResultSet result = st.executeQuery(sql);// 执行DQL语句用Query,返回结果集
//将结果集循环打印出来
while (result.next()) {
int user_id = result.getInt("user_id");
String user_name = result.getString("user_name");
System.out.println(user_id + " " + user_name);
}
方法 executeQuery(Sql) 会得到一个结果集
结果集:
常用方法
- boolean next():判断是否有下一行数据,若有,则向下移动一行指针.
- getXxx(int columnIndex):获取当前行中,第几列.(从1开始):不推荐
- getXxx(String columnName):获取当前行中的,指定列名的列的值.columnName是列名/列的>别名
- 若列的类型是VARCHAR/CHAR/TEXT,都使用getString来获取列的值.
- 若列的类型是int/integer/-->getInt来获取列的值.
-
这里附一张MySQL和JAVA数据类型对照
- 异常处理&释放
- 以上代码都要在try-catch块中写
- 还要再finally块中释放Statement和Connect对象
finally {
// --释放资源
if (st != null) {
try {
st.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}