使用 Java 将用户数据插入数据库时出现问题
Problems inserting data from user into database using Java
我有一个包含电影 table 的数据库,我正在尝试编写一个 java 程序来接收用户的输入并将其插入数据库。我的代码如下。我已经包含了整个代码,因为我不确定为什么会出现错误。
对于我收到的每一行 stmt.set...
,例如:
error: cannot find symbol - stmt.setString(fname);
我不明白为什么我会得到这个,因为我已经收到了用户的输入并在插入之前将其分配给了这个变量。
非常感谢任何帮助。
谢谢!
import java.sql.*;
import java.util.*;
import java.io.*;
public class insert {
public static void main(String [] argv) throws Exception {
Connection conn = null;
try
{
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost//////";
conn = DriverManager.getConnection(url, "/////", "///");
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
System.exit(1);
}
catch (SQLException e)
{
e.printStackTrace();
System.exit(2);
}
BufferedReader bufRead = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Please enter the id for the new movie: ");
String id = bufRead.readLine();
int id_int = Integer.parseInt(id);
System.out.println("Please enter the title for the new movie: ");
String title = bufRead.readLine();
System.out.println("Please enter the director's first name: ");
String fname = bufRead.readLine();
System.out.println("Please enter the director's last name: ");
String lname = bufRead.readLine();
System.out.println("Please enter the genre of the movie: ");
String genre = bufRead.readLine();
System.out.println("Please enter the media type: ");
String media = bufRead.readLine();
System.out.println("Please enter the movie's release date: ");
String date = bufRead.readLine();
java.sql.Date release_d = java.sql.Date.valueOf(date);
System.out.println("Please enter the movie's studio: ");
String studio = bufRead.readLine();
System.out.println("Please enter the retail price of the movie: ");
String price = bufRead.readLine();
double price_d = Double.parseDouble(price);
System.out.println("Please enter the number of copies in stock: ");
String stock = bufRead.readLine();
int stock_int = Integer.parseInt(stock);
} catch (IOException err) {
System.out.println(err);
} catch (NumberFormatException err) {
System.out.println(err);
}
System.out.println("\nWelcome to MovieDirect");
System.out.println();
try {
PreparedStatement stmt = conn.prepareStatement("INSERT INTO movie " + "(movie_id, movie_title, director_first_name, director_last_name, genre, media_type, release_date, studio_name, retail_price, current_stock)" + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
stmt.setInt(1, id_int);
stmt.setString(2, title);
stmt.setString(3, fname);
stmt.setString(4, lname);
stmt.setString(5, genre);
stmt.setString(6, media);
stmt.setDate(7, release_d);
stmt.setString(8, studio);
stmt.setDouble(9, price_d);
stmt.setString(10, stock_int);
stmt.executeUpdate();
} catch (SQLException e) {
System.out.println(e);
conn.close();
System.exit(1);
}
System.out.println("\nSuccess! ");
conn.close();
}
}
乍一看,你的错误看起来像是在谈论 setString
等等,但它实际上是关于你传递给那些方法的 变量 。
所有变量id_int
、title
、fname
、lname
等都在不同的作用域[=27]中声明=]:另一个try
块。
要修复它,请在 try
块之外声明所有这些变量(就像您对 conn
所做的那样),以便它们在所有 try
块。
我有一个包含电影 table 的数据库,我正在尝试编写一个 java 程序来接收用户的输入并将其插入数据库。我的代码如下。我已经包含了整个代码,因为我不确定为什么会出现错误。
对于我收到的每一行 stmt.set...
,例如:
error: cannot find symbol - stmt.setString(fname);
我不明白为什么我会得到这个,因为我已经收到了用户的输入并在插入之前将其分配给了这个变量。
非常感谢任何帮助。 谢谢!
import java.sql.*;
import java.util.*;
import java.io.*;
public class insert {
public static void main(String [] argv) throws Exception {
Connection conn = null;
try
{
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost//////";
conn = DriverManager.getConnection(url, "/////", "///");
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
System.exit(1);
}
catch (SQLException e)
{
e.printStackTrace();
System.exit(2);
}
BufferedReader bufRead = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Please enter the id for the new movie: ");
String id = bufRead.readLine();
int id_int = Integer.parseInt(id);
System.out.println("Please enter the title for the new movie: ");
String title = bufRead.readLine();
System.out.println("Please enter the director's first name: ");
String fname = bufRead.readLine();
System.out.println("Please enter the director's last name: ");
String lname = bufRead.readLine();
System.out.println("Please enter the genre of the movie: ");
String genre = bufRead.readLine();
System.out.println("Please enter the media type: ");
String media = bufRead.readLine();
System.out.println("Please enter the movie's release date: ");
String date = bufRead.readLine();
java.sql.Date release_d = java.sql.Date.valueOf(date);
System.out.println("Please enter the movie's studio: ");
String studio = bufRead.readLine();
System.out.println("Please enter the retail price of the movie: ");
String price = bufRead.readLine();
double price_d = Double.parseDouble(price);
System.out.println("Please enter the number of copies in stock: ");
String stock = bufRead.readLine();
int stock_int = Integer.parseInt(stock);
} catch (IOException err) {
System.out.println(err);
} catch (NumberFormatException err) {
System.out.println(err);
}
System.out.println("\nWelcome to MovieDirect");
System.out.println();
try {
PreparedStatement stmt = conn.prepareStatement("INSERT INTO movie " + "(movie_id, movie_title, director_first_name, director_last_name, genre, media_type, release_date, studio_name, retail_price, current_stock)" + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
stmt.setInt(1, id_int);
stmt.setString(2, title);
stmt.setString(3, fname);
stmt.setString(4, lname);
stmt.setString(5, genre);
stmt.setString(6, media);
stmt.setDate(7, release_d);
stmt.setString(8, studio);
stmt.setDouble(9, price_d);
stmt.setString(10, stock_int);
stmt.executeUpdate();
} catch (SQLException e) {
System.out.println(e);
conn.close();
System.exit(1);
}
System.out.println("\nSuccess! ");
conn.close();
}
}
乍一看,你的错误看起来像是在谈论 setString
等等,但它实际上是关于你传递给那些方法的 变量 。
所有变量id_int
、title
、fname
、lname
等都在不同的作用域[=27]中声明=]:另一个try
块。
要修复它,请在 try
块之外声明所有这些变量(就像您对 conn
所做的那样),以便它们在所有 try
块。