CRUD:即平常所说的增删改查,是增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。
编程步骤:
1:初始化驱动
2:建立与数据库的连接
3:创建Statement
4:执行SQL语句
5:关闭连接
具体实现:
import java.sql.*;
public class JDBCConn {
public static void main(String[] args) {
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbUrl = "jdbc:sqlserver://localhost:1433;DatabaseName=SC";
String uName = "test";
String uPwd = "test";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName(driverName);
// new com.microsoft.sqlserver.jdbc.SQLServerDriver();//与上句功能相同,均是实例化驱动
conn = DriverManager.getConnection(dbUrl, uName, uPwd);// 连接数据库
String SQL = "select * from course";
stmt = conn.createStatement();// 创建Statement
rs = stmt.executeQuery(SQL);// 执行SQL语句----------- *1
while (rs.next()) {
// 遍历result set 的结果并打印
// 这里的getXxx()方法,要根据实际获取的数据类型决定,int型则用getInt(),char、varchar则用getString()等等
System.out.println(rs.getString("courseno") + " " + rs.getString("coursename"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
// 关闭连接。此处的异常处理尤为重要,不关闭连接会造成资源浪费
// 关闭顺序为ResultSet——>Statement——>Connection
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
- 对于*1的内容,若SQL语句为DQL(数据库查询语言,select),则使用executeQuery();若为DML(数据库操纵语言,update、insert、delete)和DDL(数据库定义语言,create),则使用executeUpdate()。
- 执行查询时,其中的getXxx()方法,括号里的参数可以是列名,也可以是列号(注意这里是基1的),括号里是几就是第几列,比如1代表第一列。
应用实例:
1.使用SQL语句判断账号密码是否正确
判断账号密码的 正确方式是根据账号和密码到表中去找数据,如果有数据,就表明密码正确了,如果没数据,就表明密码错误。不恰当的方式 是把uers表的数据全部查到内存中,挨个进行比较。 如果users表里有100万条数据呢? 内存都不够用的。
{
String name = "dashen";
//正确的密码是:thisispassword
String password = "thisispassword1";
String sql = "select * from user where name = '" + name +"' and password = '" + password+"'";
// 执行查询语句,并把结果集返回给ResultSet
ResultSet rs = s.executeQuery(sql);
if(rs.next())
System.out.println("账号密码正确");
else
System.out.println("账号密码错误");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2.进行分页查询
public static void list(int start, int count)//start 表示开始条数,count表示一页显示的总数
例如: list(0,5) 表示第一页,一共显示5条数据
list(10,5) 表示第三页,一共显示5条数据
首先,要知道分页查询的SQL语句如何去写,在MySQL中,提供了一个方便的limit关键字。
LIMIT [offset,] rows
offset指定要返回的第一行的偏移量,rows第二个指定返回行的最大数目。初始行的偏移量是0(不是1)。
取前5条数据
select * from table_name limit 0,5
或者
select * from table_name limit 5
查询第11到第15条数据
select * from table_name limit 10,5
limit关键字在SQLServer中是没有的,所以需要另谋他法。
程序代码:
public static void list(int start, int count){
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
"root", "admin"); Statement s = c.createStatement();) {
String sql = "select * from hero limit " +start + "," + count;
// 执行查询语句,并把结果集返回给ResultSet
ResultSet rs = s.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");// 可以使用字段名
String name = rs.getString(2);// 也可以使用字段的顺序
float hp = rs.getFloat("hp");
int damage = rs.getInt(4);
System.out.printf("%d\t%s\t%f\t%d%n", id, name, hp, damage);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
list(10,5);
}