JDBC:
- Java DataBase Connectivity
- 一种用于执行SQL语句的Java API
API
- Application Programming Interface
- 一些预先定义的函数
代码模板
Class.forName("org.sqlite.JDBC");//加载驱动
String url="jdbc:sqlite:test.db";//用url来标识数据库
Connection conn=DriverManager.getConnection(url)//连接数据库
Statement stmt=conn.creatStatement();
ResultSet rs=stmt.execute("SELECT a,b,c FROM table1;");//执行sql语句并接收结果
while (rs.next()) {//解析结果
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
rs.close();//释放资源
stmt.close();
conn.close();
注意:
字符串 单引号
public static void InsertData(Statement stmt, String name, String typeName, int ownerId, int storeId, double price) throws SQLException {
StringBuffer sbSql = new StringBuffer(
"insert into flower(name,typeName,owner_id,store_id,price) values ('");
//TODO:1、根据函数参数,补全insert语句,并执行数据库插入操作,将这条数据插入到数据库表flower中。
sbSql.append(name+"','");
sbSql.append(typeName+"',");
sbSql.append(ownerId+",");
sbSql.append(storeId+",");
sbSql.append(price+")");
System.out.println(sbSql.toString());
stmt.execute(sbSql.toString());
}
name是一个字符串,insert时应该加上单引号:‘name’
否则报错:
[SQLITE_ERROR] SQL error or missing database (no such column: XXXXX)
SQL列下标
public static String QueryData(Statement stmt) throws SQLException {
//TODO: 1、请写出从鲜花表flower里查询所有鲜花信息的sql语句
ResultSet rs =stmt.executeQuery("select * from flower");
System.out.println("\t\t鲜花信息列表");
System.out.println("编号\t鲜花名称\t鲜花类型 \t顾客编号\t商店编号\t价格");
//TODO:2、从数据库中获取的所有鲜花信息,依次连接
StringBuilder strResult = new StringBuilder();
while (rs != null && rs.next()) {
strResult.append(rs.getString(1)).append("\t");
strResult.append(rs.getString(2)).append("\t");
strResult.append(rs.getString(3)).append("\t");
strResult.append(rs.getString(4)).append("\t");
strResult.append(rs.getString(5)).append("\n");
}
/*
经过上述while循环之后,strResult的形式如下所示。
1 杜鹃花 香槟玫瑰 1 2 123
2 郁金香瓶花 郁金香 2 1 489
3 最美的时光 白玫瑰 0 2 200
………………………………
*/
System.out.println(strResult.toString());
if (rs != null) {
rs.close();
}
return strResult.toString();
}
列下标从1开始不然报错:
java.sql.SQLException: column 0 out of bounds
getString()与getInt()
某一行的莫字段属性为NULL
getString() 返回NULL
getInt()返回0
getString与getInt均是将某一行的某一字段解析为对应格式
PreparedStatement
防止sql注入
String sql = "update flower set owner_id=? ,store_id=? where id=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, p_owner_id);
pstmt.setInt(2, p_store_id);
pstmt.setInt(3, p_id);
pstmt.execute();//执行sql语句