java jdbc in list_javaweb_JDBC
1:注冊驅動(需拷入相關jar包)
2:獲取連接Connection
3:得到執行sql語句的對象Statement
4:執行sql語句,并返回結果
5:處理結果
6:關閉Connection
代碼示例:
packagemy;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;public classmyjdbc {
public static void main(String[] args) throwsException {//1 注冊驅動
Class.forName("com.mysql.jdbc.Driver");//2 獲取連接Connection(mydatabase:數據庫名稱,root:登錄數據庫用戶名,123456:密碼)
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","root", "123456");//3 得到執行sql語句的對象Statement
Statement stmt =conn.createStatement();//4 執行sql語句,并返回結果(從表t_user中查找 id,name,password,email,birthday)
ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from t_user");//5 處理結果
while(rs.next()){
System.out.println(rs.getObject("id"));
System.out.println(rs.getObject("name"));
System.out.println(rs.getObject("password"));
System.out.println(rs.getObject("email"));
System.out.println(rs.getObject("birthday"));
System.out.println("---------------------------");
}//6 關閉Connection
rs.close();
stmt.close();
conn.close();
}
}
# 利用JDBC實現對數據庫的增刪改查
// 增加數據
public void testInsert() throwsException{//注冊驅動
Class.forName("com.mysql.jdbc.Driver");//獲取連接Connection
Connection conn = DriverManager.getConnection("dbc:mysql://localhost:3306/mydatabase","root", "123456");//得到執行sql語句的對象statement
Statement stmt =conn.createStatement();//執行sql語句,并得到返回結果(當返回的結果大于0時,表示插入數據成功)
int flag = stmt.executeUpdate("insert into t_user(name,password,email,birthday) values ('cat','123456','cat@163.com','1993-11-11')");if(flag > 0){
System.out.println("成功");
}//關閉資源
stmt.close();
conn.close();
}
// 更新數據
public void testDelete() throwsException{//注冊驅動
Class.forName("com.mysql.jdbc.Driver");//獲取連接Connection
Connection conn = DriverManager.getConnection("dbc:mysql://localhost:3306/mydatabase","root", "123456");//得到執行sql語句的對象statement
Statement stmt =conn.createStatement();//執行sql語句,并得到返回結果
int flag = stmt.executeUpdate("delete from t_user where name='cat'");if(flag > 0){
System.out.println("成功");
}//關閉資源
stmt.close();
conn.close();
}
# 注:上方兩個程序存在的問題:如果在"執行sql語句,并返回結果"時發生異常,程序就會停止,而前面所得資源還未關閉,所以可以將關閉資源得代碼放在funally中,具體修改代碼如下
public static voidmain(String[] args) {
Connection conn= null;
Statement stmt= null;
ResultSet rs= null;//注冊驅動
try{
Class.forName("com.mysql.jdbc.Driver");//獲取連接Connection
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root","12456");//得到執行sql語句的對象Statement
stmt =conn.createStatement();//執行sql語句,并返回結果
rs = stmt.executeQuery("select id,name,password,email,birthday from t_user");//處理結果
while(rs.next()) {
System.out.println(rs.getObject("id"));
System.out.println(rs.getObject("name"));
System.out.println(rs.getObject("password"));
System.out.println(rs.getObject("email"));
System.out.println(rs.getObject("birthday"));
System.out.println("------------");
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally{//關閉Connection
try{if(rs != null){
rs.close();
}
rs= null;if(stmt != null){
stmt.close();
}
stmt= null;if(conn != null){
conn.close();
}
conn= null;
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
// 查看數據
# 查找數據庫文件public voidtestSelect(){
Connection conn= null;
Statement stmt= null;
ResultSet rs= null;try{//注冊驅動
Class.forName("com.mysql.jdbc.Driver");//獲取連接Connection
conn = DriverManager.getConnection("dbc:mysql://localhost:3306/mydatabase","root", "123456");//得到執行sql語句的對象Statement
stmt =conn.createStatement();//執行sql語句,并返回結果
rs = stmt.executeQuery("select id,name,password,email,birthday from t_user");//處理結果
List userList = new ArrayList<>();//User u = new User(); 如果將創建用戶對象放于循環外,就指的是創建一個用戶對象,這個用戶對象被不斷的賦值,
在List中添加的每一個數據對象,都是指向了同一個用戶對象,它們的值都是最后一個添加的數據的值
while(rs.next()) {
User u= new User();//每循環一次創建一個對象,后依據下方代碼給對象賦值,后將被賦值的用戶對象添加到userList中
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
u.setEmail(rs.getString("email"));
u.setBirthday(rs.getDate("birthday"));
userList.add(u);//將數據存儲到List中
}
System.out.println(userList);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally{//關閉Connection
try{if(rs != null){
rs.close();
}if(stmt != null){
stmt.close();
}if(conn != null){
conn.close();
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}//User.java文件
public classUser {private intid;privateString name;privateString password;privateString email;privateDate birthday;public intgetId() {returnid;
}public void setId(intid) {this.id =id;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicString getPassword() {returnpassword;
}public voidsetPassword(String password) {this.password =password;
}publicString getEmail() {returnemail;
}public voidsetEmail(String email) {this.email =email;
}publicDate getBirthday() {returnbirthday;
}public voidsetBirthday(Date birthday) {this.birthday =birthday;
}
@OverridepublicString toString() {return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ",
birthday="+ birthday + "]";
}
}
# jdk7 和 JDBC4.1后正確關閉資源的方式
@Testpublic voidtestSelect() {//注冊驅動
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}//獲取連接Connection
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root","123456");//得到執行sql語句的對象Statement
Statement stmt =conn.createStatement();//執行sql語句,并返回結果
ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from t_user")) {//處理結果
List userList = new ArrayList<>();while(rs.next()) {
User u= newUser();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
u.setEmail(rs.getString("email"));
u.setBirthday(rs.getDate("birthday"));
userList.add(u);
}
System.out.println(userList);
}catch(SQLException e) {
e.printStackTrace();
}
}
}
# 在配置文件中存儲JDBC相關配置信息
//新建配置文件(src下創建)db.properties
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydatabase
username=root
password=123456
//加載配置文件(創建一個工具類)public classDBUtil {private staticString driverClass;private staticString url;private staticString username;private staticString password;static{
ResourceBundle rb= ResourceBundle.getBundle("db");
driverClass= rb.getString("driverClass");
url= rb.getString("url");
username= rb.getString("username");
password= rb.getString("password");try{//注冊驅動
Class.forName(driverClass);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}public static Connection getConnection() throwsSQLException{returnDriverManager.getConnection(url, username, password);
}
}
# 改造后的查看結果程序
public voidtestSelect() {//獲取連接Connection
try(
Connection conn=DBUtil.getConnection();//得到執行sql語句的對象Statement
Statement stmt =conn.createStatement();//執行sql語句,并返回結果
ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from t_user")) {//處理結果
List userList = new ArrayList<>();while(rs.next()) {
User u= newUser();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
u.setEmail(rs.getString("email"));
u.setBirthday(rs.getDate("birthday"));
userList.add(u);
}
System.out.println(userList);
}catch(SQLException e) {
e.printStackTrace();
}
}
# 模擬用戶進行登錄
//模擬登錄
public classLoginService {publicUser findUserByNameAndPassword(String name, String password) {
User u= null;
String sql= "select id,name,password,email,birthday from t_user where name='" + name + "' and password='" + password + "'";
System.out.println(sql);//獲取連接Connection
try (Connection conn =DBUtil.getConnection();//得到執行sql語句的對象Statement
Statement stmt =conn.createStatement();//執行sql語句,并返回結果
ResultSet rs =stmt.executeQuery(sql)) {//處理結果
while(rs.next()) {
u= newUser();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
u.setEmail(rs.getString("email"));
u.setBirthday(rs.getDate("birthday"));
}
}catch(SQLException e) {
e.printStackTrace();
}returnu;
}
}//輸入用戶名和密碼
public classLogin {public static voidmain(String[] args) {
Scanner input= newScanner(System.in);
System.out.println("請輸入用戶名:");
String name=input.nextLine();
System.out.println("請輸入密碼:");
String password=input.nextLine();//LoginService ls = new LoginService();
LoginServiceNew ls = newLoginServiceNew();
User u=ls.findUserByNameAndPassword(name, password);if(u == null){
System.out.println("用戶名或密碼錯誤!");
}else{
System.out.println("登錄成功!");
}
}
}
# 模擬用戶登錄存在的問題 (sql注入問題)
當登陸時輸入
用戶名
user1
密碼
hello' or 1='1此時的sql語句為"select id,name,password,email,birthday from t_user where name='user1' and password='hello' or 1='1'"注意看后面的or1='1' //當前面的用戶名和密碼對不上時為false,然而后面的1='1'的值都是true所以還是可以查出結果的
可以解決sql注入問題
PreparedStatement性能高于Statement(PreparedStatement有個預編譯的效果)public classLoginServiceNew {publicUser findUserByNameAndPassword(String name, String password) {
User u= null;
String sql= "select id,name,password,email,birthday from t_user where name=? and password=?";
System.out.println(sql);//獲取連接Connection
try (Connection conn =DBUtil.getConnection();
stmt=conn.prepareStatement(sql)) {
stmt.setString(1, name); //相當于對第一個 "?"賦值
stmt.setString(2, password); //相當于對第二個 "?"賦值
try (//執行sql語句,并返回結果
ResultSet rs =stmt.executeQuery()) {//處理結果
while(rs.next()) {
u= newUser();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
u.setEmail(rs.getString("email"));
u.setBirthday(rs.getDate("birthday"));
}
}
}catch(SQLException e) {
e.printStackTrace();
}returnu;
}
}
# 利用上方的方法修改插入數據
@Testpublic voidtestInsert() {
String sql= "insert into t_user(name,password,email,birthday) values (?,?,?,?)";try(
Connection conn=DBUtil.getConnection();
PreparedStatement stmt=conn.prepareStatement(sql);
) {
stmt.setString(1, "dog");
stmt.setString(2, "123456");
stmt.setString(3, "dog@163.com");//stmt.setDate(4, new java.sql.Date(new Date().getTime()));
stmt.setString(4, "1997-07-01");int flag =stmt.executeUpdate();if (flag > 0) {
System.out.println("成功");
}else{
System.out.println("插入失敗");
}
}catch(SQLException e) {
e.printStackTrace();
}
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的java jdbc in list_javaweb_JDBC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python遗传算法最短路径问题有几种类
- 下一篇: java 内存回收参数_JVM常用参数(