今天写了一个idea 上关于JDBC的简单java程序
算是对java JDBC编程以及java编程的回顾吧
(太久没有写java,中间出现了好多奇怪的bug,顺带在这篇文章回顾这些个bug)
准备
-
首先准备jar
此处使用的jar版本
mysql-connector-java-5.0.8-bin.jar -
在idea中导入jar包
-
默认装好jdk
导入步骤
- 在src下新建一个包将jar copy进去
- 右键jar包Add as Libary…
JDBC的连接步骤
1)加载驱动类
2)获取连接
3)执行sql
4)获取结果集
5)关闭连接
- 刚刚开始编码时写的一个辅助连接的类
- 后面为了其他的帮助准备写辅助关注辅助执行相关代码的方法时发现可以提取出这些类独立出来,于是上网进行查找,发现的确有这些相关的类
- 姑且起个同样的DBHelper名吧,具体代码实现在后面附上
//简单的连接类
public static Connection connectDb() {
String user = “root”;
String password = “123456”;
String url = “jdbc:mysql://localhost:3306/day1?characterEncoding=UTF8”;
//day1出现名称错误,花了两个小时
String driver = “com.mysql.jdbc.Driver”;
Connection conn = null;
// 写在try中会导致Error:(23, 16) java: 找不到符号
// Java.sql中的Connection和com.MySQL中的connect会冲突
try {
Class.forName(driver);//开始连接,加载驱动。
conn = (Connection) DriverManager.getConnection(url, user, password);//Error:(18, 46) java: 不兼容的类型: java.sql.Connection无法转换为com.mysql.jdbc.Connection
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//这个类后面就舍弃
//建立一个DBHelper类,帮助各种数据库操作
DBHelper的实现
//DBHelper的实现
class DBHelper {
public Connection connection;
public PreparedStatement preparedStatement;
public DBHelper() throws SQLException, ClassNotFoundException {
Class.forName(“com.mysql.jdbc.Driver”);
connection = (Connection) DriverManager.getConnection(“jdbc:mysql://localhost:3306/day1?characterEncoding=UTF8”, “root”, “123456”);
}
public ResultSet DB(String sql) throws ClassNotFoundException, SQLException {
preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
return resultSet;
}
public void excuteSql(String sql) throws SQLException {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.executeUpdate();
}
public void downConn() throws SQLException {
connection.close();
}
}
在调用DBHelper时曾经出现过问题:
Error:(63, 31) java: 无法从静态上下文中引用非静态 变量 this
原因是我把DBHelper放在了静态函数里
//非静态的内部类,只能被这个类的非静态方法访问。main方法是静态方法,使用该类创建对象时会出错。
//解决方法有两个:
// 1.将类变成静态的内部类
// 2.将类移到外面定义
DBHelper的使用示例
String userID;
String psw1;
while (true) {
System.out.println("请输入数字 :\n0.注册\n1.登录\n2.删除\n3.退出");
Scanner input = new Scanner(System.in);
String result = input.next();
int number = Integer.valueOf(result);
switch (number) {
case 0: {
System.out.println("用户名:");
Scanner scanner = new Scanner(System.in);
//获取用户名
userID = scanner.nextLine();
System.out.println("密码:");
Scanner scanner2 = new Scanner(System.in);
//获取密码
psw1 = scanner2.nextLine();
//先检查用户名是否存在,若不存在则继续注册
String sql2 = "select * from tb_user where usename =" + "'" + userID + "'";
DBHelper DBquery;
DBquery = new DBHelper();
ResultSet rsSet = DBquery.DB(sql2);
if (rsSet.next()) {
System.out.println("该用户名已被注册,请更换您的用户名再进行注册");
DBquery.downConn();
//break;
} else {
String sql = "insert into tb_user(usename,usepassword) values ('" + userID + "','" + psw1 + "')";
DBHelper DBupdate;
DBupdate = new DBHelper();
DBupdate.excuteSql(sql);
System.out.println("注册成功");
//关闭connection的连接,防止泄露
DBupdate.downConn();
//scanner.close();
//scanner2.close();
break;
}
break;
}
以上是此次代码相关心得
好久之后重新写java代码,对于异常的捕获又有了新的认识
public static void main(String[] args) throws ClassNotFoundException, SQLException {…}
主函数后抛出异常将解决很多问题
还有诸如在try中不能同时声明定义一个之后在try块外会用到的变量,不然会出现无法识别的问题
加油