操作或访问数据库
数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果。
其实一个数据库连接就是一个Socket连接。
在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式:
Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。
PrepatedStatement:SQL 语句被预编译并存储在此对象中,然后可以使用此对象多次高效地执行该语句。
CallableStatement:用于执行 SQL 存储过程
1 Statement
通过调用 Connection 对象的 createStatement() 方法创建该对象
该对象用于执行静态的 SQL 语句,并且返回执行结果
Statement 接口中定义了下列方法用于执行 SQL 语句:
int excuteUpdate(String sql):执行更新操作INSERT、UPDATE、DELETE
ResultSet excuteQuery(String sql):执行查询操作SELECT
2 ResultSet
通过调用 Statement 对象的 excuteQuery() 方法创建该对象
ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现
ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行
ResultSet 接口的常用方法:
boolean next()
getXxx(String columnLabel):columnLabel使用 SQL AS 子句指定的列标签。如果未指定 SQL AS 子句,则标签是列名称
getXxx(int index) :索引从1开始
…
java类型与SQL类型的对应关系
释放资源
Connection、Statement、ResultSet都是应用程序和数据库服务器的连接资源,使用后一定要关闭,可以在finally中关闭
未关闭后果:
@Test
public void testConnection4()throws Exception{
Properties pro = new Properties();
pro.load(ClassLoader.getSystemClassLoader().getResourceAsStream(“jdbc.properties”));
String url = pro.getProperty(“url”);
//my.ini中max_connections=10
for (int i = 0; i < 15; i++) {
Connection conn = DriverManager.getConnection(url,pro);
System.out.println(conn);
//没有关闭,资源一直没有释放
}
}
增、删、改、查示例代码
package com.atguigu.statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
/*
-
网络编程:tcp
-
服务器端:
-
1、ServerSocket server = new ServerSocket(3306);
-
2、Socket socket = server.accept();
-
3、InputStream input = socket.getInputStream();//接收sql,客户端传过来的
-
4、在服务器执行sql
-
5、把结果给客户端
-
客户端:
-
1、Socket socket = new Socket(服务器的IP地址,3306);
-
2、传sql
-
3、OutputStream out = socket.getOutputStream();
-
4、out.write(sql);
-
5、接收结果
-
6、断开连接 out.close();socket.close();
*/
public class TestStatement {
@Test
public void testAdd()throws Exception{
String sql = “INSERT INTO dept(dname,description) VALUES(‘财务部’,’负责发钱工作’)”;
String url = “jdbc:mysql://localhost:3306/1221db”;
String user = “root”;
String password = “123456”;
Connection conn = DriverManager.getConnection(url, user, password);
Statement st = conn.createStatement();
int len = st.executeUpdate(sql);//把insert,update,delete都用这个方法
if(len>0){
System.out.println(“添加成功”);
}else{
System.out.println(“添加失败”);
}
st.close();
conn.close();
}
@Test
public void testUpdate()throws Exception{
String sql = “UPDATE dept SET description = ‘负责发工资、社保、公积金工作’ WHERE dname =’财务部'”;
String url = “jdbc:mysql://localhost:3306/1221db”;
String user = “root”;
String password = “123456”;
Connection conn = DriverManager.getConnection(url, user, password);
Statement st = conn.createStatement();
int len = st.executeUpdate(sql);//把insert,update,delete都用这个方法
if(len>0){
System.out.println(“修改成功”);
}else{
System.out.println(“修改失败”);
}
st.close();
conn.close();
}
@Test
public void testDelete()throws Exception{
String sql = “DELETE FROM dept WHERE did =2”;
String url = “jdbc:mysql://localhost:3306/1221db”;
String user = “root”;
String password = “123456”;
Connection conn = DriverManager.getConnection(url, user, password);
Statement st = conn.createStatement();
int len = st.executeUpdate(sql);//把insert,update,delete都用这个方法
if(len>0){
System.out.println(“删除成功”);
}else{
System.out.println(“删除失败”);
}
st.close();
conn.close();
}
@Test
public void testSelect()throws Exception{
String sql = “SELECT * FROM dept”;
String url = “jdbc:mysql://localhost:3306/1221db”;
String user = “root”;
String password = “123456”;
Connection conn = DriverManager.getConnection(url, user, password);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);//select语句用query方法
while(rs.next()){//是否有下一行
//取这一行的单元格
int id = rs.getInt(1);
String name = rs.getString(2);
String desc = rs.getString(3);
System.out.println(id+”\t” + name + “\t” + desc);
}
rs.close();
st.close();
conn.close();
}
@Test
public void testSelect2()throws Exception{
String sql = “SELECT did,dname FROM dept”;
String url = “jdbc:mysql://localhost:3306/1221db”;
String user = “root”;
String password = “123456”;
Connection conn = DriverManager.getConnection(url, user, password);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);//select语句用query方法
while(rs.next()){//是否有下一行
//取这一行的单元格
int id = rs.getInt(“did”);
String name = rs.getString(“dname”);
System.out.println(id+”\t” + name);
}
rs.close();
st.close();
conn.close();
}
}