JDBC的相关语句
1) JDBC是什么 Java DataBase Connectivity
- Java数据库连接: 实际上JDBC是java中和数据库交互的API(Application Program Interface:应用程序编程接口)
- 为什么使用JDBC: 因为Java程序员需要连接多种数据库,为了避免每一种数据库都学习一套新的API,Sun公司提供了一个JDBC接口,各个数据库厂商根据此接口写实现类(驱动),这样Java程序员只需要掌握JDBC接口中各个方法如何调用,就可以访问任何数据库
2) 执行SQL方法
execute(sql): 可以执行任意sql,但是推荐执行DDL(create drop alter truncate),方法返回值代表是否有结果集
executeUpdate(sql): 执行增删改相关的sql,方法返回值为int类型的数值,代表生效的行数
executeQuery(sql): 执行select相关sql,方法返回值ResultSet结果集对象
3) Java类型和数据库类型对比
数据库 int Java getInt()
数据库 float Java getFloat()
数据库 double Java getDouble()
数据库 varchar() Java getString()
数据库 datetime/timestamp Java getDate()
4) 连接数据库
注册驱动 Class.forName(“”)
Class.forName(“com.mysql.jdbc.Driver”);
获取连接对象 Connection conn = null;
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/newdb3”,“root”,“root”);
创建SQL执行对象 Statement stat = conn.createStatement()
执行SQL语句 stat.execute(sql)
5) ResultSet获取数据的方式
ResultSet res = stat.执行SQL的方法;
通过字段名称获取 res.getString(字段名称)
通过查询字段的位置获取 res.getString(字段位置)
6) Statement SQL语句和参数同时传入
Statement stat = conn.createStatement();
String sql = “select count() from user where username=’"+username+"’";
ResultSet res = stat.executeQuery(sql);
7) PreparedStatement 创建预编译SQL语句,在添加语句参数
String sql = " select count() from user where username=? “;
PreparedStatement stat = conn.prepareStatement(sql);
stat.setString(1, username);
ResultSet res = stat.executeQuery();
8) 读取.properties配置文件*
创建读取配置文件的对象
Properties prop = new Properties();
获取文件输入流
InputStream is = 本文件名.class.getClassLoader().getResourceAsStream(”*.properties”);
把文件流加载到位置文件对象中
prop.load(is);
获取配置文件中的数据 获取到的都是字符串
String name = prop.getProperty(“name”);
9) 数据库连接池DBCP (DataBase Connection Pool)
为什么使用 : 如果不使用连接池,每一次和数据库的交互都需要建立一次连接,交互完之后则断开连接,一万次业务交互则需要有一万次开建立连接和关闭连接,频繁开关连接浪费资源,通过数据库连接池可以将用完之后的连接进行重用,避免资源的浪费
导入DBCP的jar包
10) 事务
开启事务,需要关闭自动提交 conn.setAutoCommit(false);
事务提交 conn.commit();
事务回滚 conn.rollback();
11) 批量操作
添加到批量操作
Statement下 stat.addBatch(sql);
PrepardStatement下 stat.addBatch();
执行批量操作 stat.executeBatch();
12) 获取自增主键值
第一种PreparedStatement
String sql = “insert into hero values(null,?)”;
PreparedStatement stat = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
stat.setString(1, “admin”);
stat.executeUpdate();
ResultSet rs = stat.getGeneratedKeys(); 获取返回的主键值
while(rs.next()){
int id = rs.getInt(1);
System.out.println(“自增主键:”+id);
}
第二种Statement
String sql = “insert into hero values(null,’”+name+"’)";
Statement stat = conn.createStatement();
stat.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stat.getGeneratedKeys(); 获取返回的主键值
while(rs.next()){
int id = rs.getInt(1);
System.out.println(“自增主键:”+id);
}
13) 获取数据库的元数据
DatabaseMetaData dbmd = conn.getMetaData();
数据库版本 dbmd.getDriverMajorVersion()
数据库用户名 dbmd.getUserName()
数据库地址 dbmd.getURL()
数据库厂商 dbmd.getDatabaseProductName()
14) 获取表的元数据
Statement stat = conn.createStatement();
ResultSet res = stat.executeQuery(“select * from hero”);
获取表的元数据 ResultSetMetaData rsmd = res.getMetaData();
得到表字段数量 int count = rsmd.getColumnCount();
for(int i = 1; i <= count; i++){
获取字段名 rsmd.getColumnName(i)
获取字段类型 rsmd.getColumnTypeName(i)
}
15)
16)