import java.sql.*; public class b2 { public static void main(String[] args) { try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } String usl="jdbc:mysql://localhost:3306/computer"; String user="root"; String pwd="241356"; try { Connection conn =DriverManager.getConnection(usl,user,pwd); Statement sta = conn.createStatement(); String delectsql = "delete from stu where id=2"; String selectsql = "select * from stu"; String insertsql = "insert into stu(id,name,sex,age,major)values(?,?,?,?,?)"; sta.executeUpdate(insertsql, new String[] {"8","李商隐","男","18","软件工程"}); sta.executeUpdate(delectsql); ResultSet rs = sta.executeQuery(selectsql); System.out.println("id"+"\t"+"name"+"sex"+"\t"+"age"+"\t"+"major"); while(rs.next()) { System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3) +"\t"+rs.getInt(4)+"\t"+rs.getString(5)); } } catch (Exception e) { e.printStackTrace(); } } }
时间: 2023-07-06 18:41:36 浏览: 156
这段代码的问题在于,执行插入操作时使用了错误的参数类型。`executeUpdate` 方法的第二个参数应该是一个整型数组,而不是字符串数组。
所以,将代码修改为以下格式:
```
int id = 8;
String name = "李商隐";
String sex = "男";
int age = 18;
String major = "软件工程";
PreparedStatement pstmt = conn.prepareStatement(insertsql);
pstmt.setInt(1, id);
pstmt.setString(2, name);
pstmt.setString(3, sex);
pstmt.setInt(4, age);
pstmt.setString(5, major);
pstmt.executeUpdate();
```
这样就可以正确执行插入操作了。
相关问题
package connectmysql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Scanner; import java.sql.SQLException; import java.sql.Statement; public class text { private final static String url ="jdbc:mysql://localhost:3306/mytextsql?severTimezone=GMT"; private final static String username="root"; private final static String password="yxh9497"; public static void main(String args[]) { try { Class.forName("com.mysql.cj.jdbc.Driver"); }catch(Exception e) { e.printStackTrace(); } try { Connection connect=DriverManager.getConnection(url,username,password); Statement stmt=connect.createStatement(); Scanner a=new Scanner(System.in); System.out.print("删除的是:"+'\n'); String a4=a.next(); String sql="delete from user where name="+a4; int i=stmt.executeUpdate(sql); if(i > 0){ System.out.println("删除成功"); } }catch(Exception e) { e.printStackTrace(); } } }
看起来您的代码是在使用Java连接MySQL数据库,并尝试删除一个名为`user`的表中的行。但是,这段代码存在一些潜在的问题。
首先,您缺少`import java.sql.SQLException`语句,因此编译器可能会报告找不到该类的错误。因此,您需要在代码顶部添加此导入语句。
其次,您在SQL语句中使用了字符串变量`a4`,但没有将其用引号括起来。这可能导致SQL语句无法正确解析,从而导致删除操作失败。因此,您需要将`a4`变量用引号括起来,以确保SQL语句正确。
最后,您使用了两个`Statement`对象,这应该会导致编译错误。您需要删除其中一个`import java.sql.Statement`语句,并将`stmt`对象的声明放置在`try`块中。
下面是修改后的代码:
```
package connectmysql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
import java.sql.SQLException;
public class text {
private final static String url ="jdbc:mysql://localhost:3306/mytextsql?severTimezone=GMT";
private final static String username="root";
private final static String password="yxh9497";
public static void main(String args[]) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
}catch(Exception e) {
e.printStackTrace();
}
try {
Connection connect=DriverManager.getConnection(url,username,password);
Statement stmt=connect.createStatement();
Scanner a=new Scanner(System.in);
System.out.print("删除的是:"+'\n');
String a4=a.next();
String sql="delete from user where name='"+a4+"'";
int i=stmt.executeUpdate(sql);
if(i > 0){
System.out.println("删除成功");
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}
```
希望这可以帮助您解决问题。
添加代码使得这段代码显示在一个窗口中:package csclient; import java.sql.*; public class Test { private static String driver = "com.mysql.cj.jdbc.Driver"; private static String URL = "jdbc:mysql://localhost:3306/student"; private static String user = "root"; private static String password = "z7.h7.m7."; /** * JDBC测试. */ private static void JDBCexample() { // 1.加载数据库驱动 try { Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } testStatement(); } /** * 测试Statement的用法. */ private static void testStatement() { try (// 2.打开数据库连接 Connection conn = DriverManager.getConnection(URL, user, password); // 3.创建语句 Statement stmt = conn.createStatement()) { // 模拟SQL注入 testSqlInjecton(stmt); } catch (SQLException sqle) { System.out.println("SQLException : " + sqle); } } /** * 模拟SQL注入. * * @param stmt Statement对象. * @throws SQLException */ private static void testSqlInjecton(Statement stmt) throws SQLException { String name = "X' or 'Y' = 'Y"; String sql = "select * from stu_info where name = '" + name + "'"; ResultSet rs = stmt.executeQuery(sql); ResultSetPrinter.printResultSet(rs); } public static void main(String[] args) { JDBCexample(); } }
您可以使用Swing框架来创建一个简单的窗口,并将代码显示在其中。以下是示例代码:
```java
import javax.swing.*;
import java.awt.*;
public class CodeWindow extends JFrame {
public CodeWindow() {
// 设置窗口标题
setTitle("Code Display");
// 创建文本区域,用于显示代码
JTextArea codeTextArea = new JTextArea(20, 40);
codeTextArea.setEditable(false);
// 将代码添加到文本区域
String code = "package csclient; import java.sql.*; public class Test { private static String driver = \"com.mysql.cj.jdbc.Driver\"; private static String URL = \"jdbc:mysql://localhost:3306/student\"; private static String user = \"root\"; private static String password = \"z7.h7.m7.\"; /** * JDBC测试. */ private static void JDBCexample() { // 1.加载数据库驱动 try { Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } testStatement(); } /** * 测试Statement的用法. */ private static void testStatement() { try (// 2.打开数据库连接 Connection conn = DriverManager.getConnection(URL, user, password); // 3.创建语句 Statement stmt = conn.createStatement()) { // 模拟SQL注入 testSqlInjecton(stmt); } catch (SQLException sqle) { System.out.println(\"SQLException : \" + sqle); } } /** * 模拟SQL注入. * * @param stmt Statement对象. * @throws SQLException */ private static void testSqlInjecton(Statement stmt) throws SQLException { String name = \"X' or 'Y' = 'Y\"; String sql = \"select * from stu_info where name = '\" + name + \"'\"; ResultSet rs = stmt.executeQuery(sql); ResultSetPrinter.printResultSet(rs); } public static void main(String[] args) { JDBCexample(); } }";
codeTextArea.setText(code);
// 将文本区域添加到滚动面板中
JScrollPane scrollPane = new JScrollPane(codeTextArea);
// 将滚动面板添加到窗口中
getContentPane().add(scrollPane, BorderLayout.CENTER);
// 设置窗口大小并居中显示
setSize(500, 400);
setLocationRelativeTo(null);
// 显示窗口
setVisible(true);
}
public static void main(String[] args) {
new CodeWindow();
}
}
```
您可以将以上代码保存为一个名为 `CodeWindow.java` 的文件,并在命令行中运行 `javac CodeWindow.java` 编译它。然后,运行 `java CodeWindow` 以启动窗口并显示代码。
阅读全文