Java访问数据库,常规操作+提升
当你发现一件事情的套路之后解决起来就容易了~
当然,请确保你配置好了连接数据库的jar包。
- 设计mySql数据库表
添加两个测试值
- 常规操作是:
import cn.gx.home.domain.User;
import java.sql.*;
public class TestCode{
//数据库连接
//连接mysql数据库地址
static String url = "jdbc:mysql://localhost:3306/products"; //表名
//用户名
static String root = "root";
static String pwd = "12138";
public static void main(String[] args) {
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获得链接
Connection con = DriverManager.getConnection(url, root, pwd);
//3.通过con获得Statement对象
PreparedStatement pst = con.prepareStatement("select * from users");
//4.执行SQL语句获得结果集对象
ResultSet rs = pst.executeQuery();
//5.处理结果集
while (rs.next()){
//调用re.getXxx()方法获取记录游标执行的行列值
User user = new User();
//将数据填入对象
user.setUsername(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setLimits(rs.getString("limits"));
System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));
}/*while*/
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
输出结果表明,可以正常访问
但是一个项目要能够方便调用不同类的不同功能,
写法代码可能有所改变,
下面是个人见解
- 对应数据库:创建一个domain包,创建对应类型的数据实现getting和setting方法
(存储从数据库获取的数据)
/*
用户信息类
*/
public class User {
private String username; //用户名
private String password; //密码
private String limits; //权限
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getLimits() { return limits; }
public void setLimits(String limits) { this.limits = limits; }
}
2.同理创建util包,编写数据库连接代码
/*数据库连接类*/
public class DBUtil {
//连接mysql数据库地址
static String url = "jdbc:mysql://localhost:3306/products"; //(products)表名
static String root = "root"; //安装mySql时的账号
static String pwd = "12138"; //密码
static Connection conn;
static{
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
conn = null;
try {
conn = DriverManager.getConnection(url, root, pwd);
} catch (SQLException e) {
//驱动错误
e.printStackTrace();
}
return conn;
}/*getCon*/
public static void closeConnection(){ //关闭连接
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
- 创建server包,编写需要访问数据库的功能代
/*
用户服务类
*/
public abstract class UserService {
Connection conn; //连接对象
PreparedStatement statement; //预编译对象
ResultSet resultSet; //结果集对象
User user = null; //信息对象
/*查询users信息*/
public ArrayList<User> queryUser(){
System.out.println("查询商品列表");
ArrayList<User> allUsers = new ArrayList<User>();
//通过数据库查询信息
conn = DBUtil.getConnection();
String sql = "select * from users";
try {
statement = conn.prepareStatement(sql);
resultSet = statement.executeQuery();
while(resultSet.next()) { //默认指向第一行
user = new User();
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setLimits(resultSet.getString("limits"));
allUsers.add(user); //将对象添加到列表
}
} catch (SQLException e) {
//数据库查询错误处理
e.printStackTrace();
}
finally {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
DBUtil.closeConnection();
}
System.out.println(allUsers);
return allUsers;
}/*queryUser*/
}
此时的输出结果
因为是流的形式传递,这是正常结果!
当你要访问具体数值的时候使用foreach循环就可以:
System.out.println("------------------User详情------------------");
if (allUsers.size() > 0) { //通过长度判断是否搜索到商品
//循环
for (User user: allUsers) {
System.out.println("用户名称:" + user.getUsername());
System.out.println("用户密码:" + user.getPassword());
System.out.println("用户权限:" + user.getLimits());
}
System.out.println("----------------------------------------");
}else{
System.out.println("User列表为空!");
}
访问结果,
就这样吧,我这时间是23:07——多吃饭多睡觉能补元气~