一 概念
1 JDBC:使用java程序发送sql语句到数据库服务器端执行,是Sun公司设计的一套专门用于java程序操作数据库的接口。
2 使用jdbc发送sql条件:
数据库主机;端口;数据库用户名;数据库密码;链接的数据库;
3 JDBC核心:
3.1 Driver接口:数据库驱动程序的接口
Connection connect(String url,properties info)用于获取数据库连接
3.2 Connection接口:与具体数据库的链接对象
Statement create Statement() //创建一个静态sql语句对象
preparedStatementprepareStatement(String sql)//创建预编译的sql语句对象
callableStatement prepareCall(String sql)//创建存储过程的sql语句对象
3.3 Statement接口:用于执行静态sql语句
int executeUpdate(String sql)//执行更新操作的sql语句(create/alter/drop/insert/update/delete)
ResultSet executeQuery(String sql)//执行查询操作的sql语句(select)
package DemoStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo01 {
private static String url="jdbc:mysql://localhost:3306/day02";
private static String user="root";
private static String password="root";
public static void main(String[] args) {
Connection conn=null;
Statement st=null;
try{
//驱动程序
Class.forName("com.mysql.jdbc.Driver");
//从驱动程序管理类获取连接
conn=DriverManager.getConnection(url, user, password);
//通过connection对象获取statement对象
st=conn.createStatement();
//创建sql语句
String sql="CREATE TABLE person(id INT,NAME VARCHAR(10),age INT);";
//执行sql语句
int eu = st.executeUpdate(sql);
System.out.println(eu);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package DemoStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo05 {
//数据库的连接URL
private static String url="jdbc:mysql://localhost:3306/day02";
//数据库用户名
private static String user="root";
//数据库密码
private static String password="root";
public static void main(String[] args) {
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try{
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//驱动器获取连接对象
conn=DriverManager.getConnection(url, user, password);
//连接connection对象获取statement对象
st=conn.createStatement();
//写sql语句
String sql="SELECT * FROM person;";
//执行sql语句
rs= st.executeQuery(sql);
while(rs.next()){
//使用列索引获取列值
int id=rs.getInt(1);
String name=rs.getString(2);
int age=rs.getInt(3);
System.out.println(id+"-"+name+"-"+age);
}
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
3.4 preparedStatement接口:用于执行预编译的SQL 语句(是Statement的子接口)
int executeUpdate() 执行更新操作的sql语句
ResultSetexecuteQuery() 执行查询操作的sql语句
package DemoPreparedStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import Gongjulei.JdbcUtil;
public class PreparedStatementDemo01 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement st = null;
try{
conn=JdbcUtil.getConnection();
String sql="INSERT INTO person VALUES (?,?,?);";
st = conn.prepareStatement(sql);
st.setString(1,"3");
st.setString(2, "王五");
st.setString(3, "30");
int count = st.executeUpdate();
System.out.println(count);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(null, st, conn);
}
}
}
package DemoPreparedStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import Gongjulei.JdbcUtil;
public class PreparedStatementDemo03 {
public static void main(String[] args) {
Connection conn=null;
PreparedStatement pt=null;
ResultSet rs=null;
try{
conn=JdbcUtil.getConnection();
String sql="SELECT * FROM person WHERE NAME LIKE ?";
pt = conn.prepareStatement(sql);
pt.setString(1, "刘%");
rs = pt.executeQuery();
while(rs.next()){
int id= rs.getInt("id");
String name=rs.getString("name");
int age = rs.getInt("age");
System.out.println(id+"-"+name+" "+age);
}
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(rs, pt, conn);
}
}
}
3.5 CallableStatement接口:用于执行Sql存储过程的接口(是PreparedStatement的子接口)
ResultSet executeQuery() 执行存储过程的sql语句
package DemoCallableStatement;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import Gongjulei.JdbcUtil;
public class CallableStatementDemo {
public static void main(String[] args) {
Connection conn=null;
CallableStatement cs=null;
ResultSet rs=null;
try{
conn=JdbcUtil.getConnection();
String sql="CALL pro_findById(?)";
cs = conn.prepareCall(sql);
cs.setInt(1, 3);
rs=cs.executeQuery();
while(rs.next()){
int id=rs.getInt("id");
String name=rs.getString("name");
int age=rs.getInt("age");
System.out.println(id+" "+name+" "+age);
}
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(rs, cs, conn);
}
}
}
3.6 ResultSet接口:结果集对象,存储所有数据的查询结果,用该对象进行数据遍历。
boolean next():把光标移动到下一行,如果下一行有数据,返回true,如果没有则返回false。
getXXX(列索引|列字段名称):获取字段的数据。