JDBC:
1.通过JAVA访问数据库:
2.JDBC包:java.sql:核心类与接口
javax.sql:数据库连接池,数据源,JNDI,Rowset
3.常用类和接口:DriverManager:驱动管理器获得数据库连接
Connection:数据库连接接口
Statement:静态操作SQL语句
PreparedStatement:动态操作SQL语句
CallableStatement:可调用储存过程的预定义语句
ResultSet:保存数据记录的结果集
ResultSetMetaData:结果集元数据(列名称、类型)
DatabaseMetaData:数据元数据(数据库名称、版本)
4.步骤:jar包对应不同的数据库
1.加载数据库驱动.jar
2.获得数据库连接
3.创建连接+查询+遍历结果集
4.关闭数据库
例: Class.forName("com.mysql.jdbc.Driver"); //1.加载驱动 反射机制:Java从类名中获得一个类实例。
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/080225_db","root","1"); //2.获得链接 参数:url,username,password
Statement stmt = conn.createStatement(); //3.创建语句
ResultSet rs = stmt.executeQuery("select * from UserTbt"); //查询
while(re.next()){ 遍历
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
System.out.println("id+":"+username+":"+password);
}
connection:
1.获得数据库连接: Class.forName("com.mysql.jdbc.Driver"); //加载驱动
2.获得链接: DriverManager.getConnection("jdbc:mysql://localhost:3306/080225_db","root","root"); //获得链接
3.创建语句: Statement stmt = conn.createStatement();
4.事务:
提交:conn.setAutoCommit(false); //取消自动提交
conn.commit(); //在执行Statement语句后手动提交
回滚:conn.rollback(); //在数据库无法完成操作时在异常处理中回滚
5.关闭: conn.close(); //在数据库处理后始终(finally)进行关闭操作
Statement接口(静态):
1.创建语句:Statement stmt = new DriverManager.getConnection("jdbc:mysql://url","username","password").createStatement();
2.子接口:
PreparedStatement(动态):
执行动态SQL语句: PreparedStatement pstmt = conn.perparedStatement("update employees set salay = ? where id =?");
pstmt.setBigDecimal(1,salay_value); //设置第一个问号的值
pstmt.setInt(2,id_value); //设置第二个问号的值
pstmt.executeUpdate(); //增删改操作需要更新
1.子接口:
CallableStatement(调用存储过程):
1.调用简单的存储过程://默认存在存储过程: create procedure all_stu() select * from stutbl;
CallableStatement cstmt = conn.prepareCall("{call all_stu()}"); //sql语句被{}包围
2.调用有输入参数的存储过程: //存在存储过程 create procedure insert_users(in uname varchar(20),in pword varchar(20)) insert into usertbl(username,password) values(uname,pword);
//用 in 申明输入参数 用 out 申明输出参数
CallableStatement cstmt = conn.prepareCall("{call insert_stu(?,?)}");
cstmt.setString(1, "wdd+.+");
cstmt.setString(2, "still_wyy");
3.调用有输入输出参数的存储过程:
// 存在存储过程 create procedure getPwordByUname(in uname varchar(20),out pword varchar(20))
// begin
// declare tempword varchar(20);
// select pword into tempword from usertbl where username = uname;
// set pword = tempword;
// end;
3.常用方法: execute(); //执行sql语句
executeQuery(); //执行一个查询 返回一个 ResultSet 对象(结果集 一开始指针指在第一条结果的上一个位置,结束在最后一条结果的后一个位置)
executeUpdate(); //执行一个修改(包括 插入、修改、删除)
close();
ResultSet:
1.常用方法: next(); //指针初始在第一条记录上一个位置,最后一个位置在最后一条记录之后,当没有下一跳记录时返回 false
getXXX();
absolute(int row); //指针位置直接移到第 row 条记录
afterFast();/beforeFirst(); //尾部、首部
first();/last(); //第一条记录、最后一条记录
isFirst();/isLast();/isAfterLast();/isBeforeFirst();
getRow(); //获得当前行 [0,n+1]
2.可滚动/更新的 ResultSet 对象:
修改: Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); //想要更新的表必须有主键
ResultSet rs = stmt.executeQuery("select id,name,age from stutbl");
rs.absolute(1);
rs.updateString("name", "18_forever^_^");
rs.updateRow();
插入: rs.moveToInsertRow() //移动到插入行 插入行是一个被提供的特殊的位置
rs.updateInt(1, 2);
rs.insertRow();
3.类型对应: char/varchar/longvarchar -> String
bit -> boolean
smallint -> short
smallint/interger -> int
bigint -> long
real -> float
float/double -> double
MetaData 元数据:
1.ResultSetMetaData 结果集的元数据:rs.getMetaData()
方法: getColumnCount(); // 返回结果集的 列 数
getColumnName(int column); //获取第 i 列的列名
getColumnTypeName(int column); //获取第 i 列的数据类型
2.DatabaseMetaData 数据库的元数据: conn.getMetaData();
方法: getDatabaseProductName(); //获得数据库的名称
getDatabaseMaiorVersion(); //版本号
getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types)
// 参数:
// catalog - 类别名称;它必须与存储在数据库中的类别名称匹配;该参数为 "" 表示获取没有类别的那些描述;为 null 则表示该类别名称不应该用于缩小搜索范围
// schemaPattern - 模式名称的模式;它必须与存储在数据库中的模式名称匹配;该参数为 "" 表示获取没有模式的那些描述;为 null 则表示该模式名称不应该用于缩小搜索范围
// tableNamePattern - 表名称模式;它必须与存储在数据库中的表名称匹配
// types - 要包括的表类型所组成的列表,必须取自从 getTableTypes() 返回的表类型列表;null 表示返回所有类型
// 返回:
// ResultSet - 每一行都是一个表描述 :为空则表示数据库中不存在要匹配的表 getTables(null,null,tablename,null);
1.通过JAVA访问数据库:
2.JDBC包:java.sql:核心类与接口
javax.sql:数据库连接池,数据源,JNDI,Rowset
3.常用类和接口:DriverManager:驱动管理器获得数据库连接
Connection:数据库连接接口
Statement:静态操作SQL语句
PreparedStatement:动态操作SQL语句
CallableStatement:可调用储存过程的预定义语句
ResultSet:保存数据记录的结果集
ResultSetMetaData:结果集元数据(列名称、类型)
DatabaseMetaData:数据元数据(数据库名称、版本)
4.步骤:jar包对应不同的数据库
1.加载数据库驱动.jar
2.获得数据库连接
3.创建连接+查询+遍历结果集
4.关闭数据库
例: Class.forName("com.mysql.jdbc.Driver"); //1.加载驱动 反射机制:Java从类名中获得一个类实例。
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/080225_db","root","1"); //2.获得链接 参数:url,username,password
Statement stmt = conn.createStatement(); //3.创建语句
ResultSet rs = stmt.executeQuery("select * from UserTbt"); //查询
while(re.next()){ 遍历
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
System.out.println("id+":"+username+":"+password);
}
connection:
1.获得数据库连接: Class.forName("com.mysql.jdbc.Driver"); //加载驱动
2.获得链接: DriverManager.getConnection("jdbc:mysql://localhost:3306/080225_db","root","root"); //获得链接
3.创建语句: Statement stmt = conn.createStatement();
4.事务:
提交:conn.setAutoCommit(false); //取消自动提交
conn.commit(); //在执行Statement语句后手动提交
回滚:conn.rollback(); //在数据库无法完成操作时在异常处理中回滚
5.关闭: conn.close(); //在数据库处理后始终(finally)进行关闭操作
Statement接口(静态):
1.创建语句:Statement stmt = new DriverManager.getConnection("jdbc:mysql://url","username","password").createStatement();
2.子接口:
PreparedStatement(动态):
执行动态SQL语句: PreparedStatement pstmt = conn.perparedStatement("update employees set salay = ? where id =?");
pstmt.setBigDecimal(1,salay_value); //设置第一个问号的值
pstmt.setInt(2,id_value); //设置第二个问号的值
pstmt.executeUpdate(); //增删改操作需要更新
1.子接口:
CallableStatement(调用存储过程):
1.调用简单的存储过程://默认存在存储过程: create procedure all_stu() select * from stutbl;
CallableStatement cstmt = conn.prepareCall("{call all_stu()}"); //sql语句被{}包围
2.调用有输入参数的存储过程: //存在存储过程 create procedure insert_users(in uname varchar(20),in pword varchar(20)) insert into usertbl(username,password) values(uname,pword);
//用 in 申明输入参数 用 out 申明输出参数
CallableStatement cstmt = conn.prepareCall("{call insert_stu(?,?)}");
cstmt.setString(1, "wdd+.+");
cstmt.setString(2, "still_wyy");
3.调用有输入输出参数的存储过程:
// 存在存储过程 create procedure getPwordByUname(in uname varchar(20),out pword varchar(20))
// begin
// declare tempword varchar(20);
// select pword into tempword from usertbl where username = uname;
// set pword = tempword;
// end;
3.常用方法: execute(); //执行sql语句
executeQuery(); //执行一个查询 返回一个 ResultSet 对象(结果集 一开始指针指在第一条结果的上一个位置,结束在最后一条结果的后一个位置)
executeUpdate(); //执行一个修改(包括 插入、修改、删除)
close();
ResultSet:
1.常用方法: next(); //指针初始在第一条记录上一个位置,最后一个位置在最后一条记录之后,当没有下一跳记录时返回 false
getXXX();
absolute(int row); //指针位置直接移到第 row 条记录
afterFast();/beforeFirst(); //尾部、首部
first();/last(); //第一条记录、最后一条记录
isFirst();/isLast();/isAfterLast();/isBeforeFirst();
getRow(); //获得当前行 [0,n+1]
2.可滚动/更新的 ResultSet 对象:
修改: Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); //想要更新的表必须有主键
ResultSet rs = stmt.executeQuery("select id,name,age from stutbl");
rs.absolute(1);
rs.updateString("name", "18_forever^_^");
rs.updateRow();
插入: rs.moveToInsertRow() //移动到插入行 插入行是一个被提供的特殊的位置
rs.updateInt(1, 2);
rs.insertRow();
3.类型对应: char/varchar/longvarchar -> String
bit -> boolean
smallint -> short
smallint/interger -> int
bigint -> long
real -> float
float/double -> double
MetaData 元数据:
1.ResultSetMetaData 结果集的元数据:rs.getMetaData()
方法: getColumnCount(); // 返回结果集的 列 数
getColumnName(int column); //获取第 i 列的列名
getColumnTypeName(int column); //获取第 i 列的数据类型
2.DatabaseMetaData 数据库的元数据: conn.getMetaData();
方法: getDatabaseProductName(); //获得数据库的名称
getDatabaseMaiorVersion(); //版本号
getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types)
// 参数:
// catalog - 类别名称;它必须与存储在数据库中的类别名称匹配;该参数为 "" 表示获取没有类别的那些描述;为 null 则表示该类别名称不应该用于缩小搜索范围
// schemaPattern - 模式名称的模式;它必须与存储在数据库中的模式名称匹配;该参数为 "" 表示获取没有模式的那些描述;为 null 则表示该模式名称不应该用于缩小搜索范围
// tableNamePattern - 表名称模式;它必须与存储在数据库中的表名称匹配
// types - 要包括的表类型所组成的列表,必须取自从 getTableTypes() 返回的表类型列表;null 表示返回所有类型
// 返回:
// ResultSet - 每一行都是一个表描述 :为空则表示数据库中不存在要匹配的表 getTables(null,null,tablename,null);