最近遇见一些问题,今天来总结一下
- 当数据库表中,主键字段需从1开始自增,其他字段手动输入时,如何用Java代码实现(下面附Student表图与其结构图)
//Student表图
//结构图
// 获取数据库连接的方法
public static Connection getConn() throws ClassNotFoundException, SQLException {
// 将驱动程序加载到内存
Class.forName("com.mysql.jdbc.Driver");
// // 创建数据库连接
String url = "jdbc:mysql://localhost:3306/student";
String user = "root";
String password = "111111";
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
// 保存学生信息
public static void save(Student stude) throws ClassNotFoundException, SQLException {
// 获取连接
Connection conn = getConn();
String sql = "insert into student(name,sex,age,telephone)values(?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, stude.name);// name
ps.setString(2, stude.sex);// sex
ps.setInt(3, stude.age);// age
ps.setString(4, stude.telephone);// telephone
ps.executeUpdate();
ps.close();
conn.close();
}
2.根据name字段来删除学生,如果数据库中该name不存在,就提示:你输入的学生不存在;若存在则直接删除。
分析:我刚开始是这样想的,首先从数据库中查询Student表中是否存在这个name的值。用ResultSet对象来接收查询出来的结果,再用next()方法来判断其中是否有值,然后根据结果来判断是否执行delete语句。
代码如下:
// 删除学生信息
public static void delete(String stuname) throws ClassNotFoundException, SQLException, IOException {
// 获取连接
Connection conn = getConn();
try {
String sql2 = "select * from student where name = '" + stuname + "'";
PreparedStatement pst = conn.prepareStatement(sql2);
// 结果集对象 查询数据
ResultSet rs = pst.executeQuery();
if (rs.next()) {
String sql = "delete from student where name = '" + stuname + "'";
PreparedStatement ps = conn.prepareStatement(sql);
ps.executeUpdate(sql);
System.out.println("提示:"+stuname +"的学生信息已经删除!");
}else{
System.out.println("你输入的学生不存在。");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//上面这个代码,是最基本的,但我感觉不够好,就找了优化的方法,果然被我找到了
其实PreparedStatement有个方法int executeUpdate(String sql); 它的返回值是可执行增,删,改,返回执行受到影响的行数。如果返回值为0,则证明该name不存在;返回值大于0,则存在可以直接删除,这样代码就简洁的多了.
//代码如下
// 删除学生信息 (优化后)
public static void delete(String stuname) throws ClassNotFoundException, SQLException, IOException {
try {
// 获取连接
Connection conn = getConn();
String sql = "delete from student where name = '" + stuname + "'";
PreparedStatement ps = conn.prepareStatement(sql);
int count = ps.executeUpdate(sql);
if (count > 0) {
System.out.println("提示:" + stuname + "的学生信息已经删除!");
} else {
System.out.println("你输入的学生不存在。");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}