gpt4 book ai didi

Java SQL 数据库和对象存储

转载 作者:行者123 更新时间:2023-12-01 15:03:18 25 4
gpt4 key购买 nike

我想创建一个 Java GUI 程序。

该程序应允许用户添加项目(标题、价格)。当他们添加项目时,该项目必须添加到 mySql 数据库以及 Item 对象中。然后需要将该项目对象存储在集合中。

Java 项目对象:

    import java.util.*;
import java.io.Serializable;

class Items implements Serializable{

private String title;
private String price;

public Items(String t, String p) {

title = t;
price = p;
}

public void setTitle(String t) {
title = t;
}
public String getTitle() {
return title;
}

public void setPrice(String p) {
price = p;
}
public String getPrice() {
return price;
}
}

商店

import java.util.*;
import java.io.Serializable;
import java.rmi.*;
import java.rmi.server.*;
import java.sql.*;

class Shop extends UnicastRemoteObject implements ShopInterface, Serializable {


//Create Array to Store Items and Users
ArrayList<Items> arrayItems;

//Database connection data
Connection conn = null; // connection object

private final String database = "Shop";
private final String user = "";
private final String password = "";
private final String url = "jdbc:mysql:///" + database;

protected Shop() throws RemoteException {


arrayItems = new ArrayList<Items>();


//Load the driver
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

//Establish Connection
try {
conn = DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("Shop Created and Database Connection Completed");

}
//Add Items to Shop
public void additems(String t, String p)
throws RemoteException {


//SQL Insert Statement
String insertSQL = "INSERT INTO ShopItems(title, price) VALUES('" +
t + "','" + p + "')";

//Try Insert
try {
Statement stmt = conn.createStatement();
int res = stmt.executeUpdate(insertSQL);
arrayItems.add(new Items(t, p));

}
catch(SQLException se) {
System.err.println(se);
}
}
}

这是正确的做法吗?像这样的东西会起作用吗? (未测试过)

最佳答案

我绝对不会直接执行 SQL。通过自己解析 SQL 插入字符串,您将面临 SQL 注入(inject)攻击。

如果您想使用 JDBC,我建议使用 Prepared Statements 。更改当前代码以使用它不会产生太大影响,并且可以保护您免受 SQL 注入(inject)攻击。

PreparedStatement stmt = conn.createStatement("INSERT INTO ShopItems(title, price) VALUES(?,?)");
stmt.setString(1, t);
stmt.setString(2, p);

如果这是您第一次进行任何类型的 SQL 工作,我还建议您简要了解一下 JPA。虽然一开始可能会令人畏惧,但它会使从数据存储中序列化和反序列化对象变得非常容易。

关于Java SQL 数据库和对象存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13323974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com