Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解javajdbc错误_Java_Mysql_Jdbc - Fatal编程技术网

理解javajdbc错误

理解javajdbc错误,java,mysql,jdbc,Java,Mysql,Jdbc,我希望在理解这个错误方面能得到一些帮助。我正在与数据库建立一个简单的连接,出于某种原因,它不喜欢我的输入,但我无法理解错误实际发生的位置。任何帮助都将不胜感激-谢谢 我的代码: package db; import java.sql.*; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Scanner; public class BankAcco

我希望在理解这个错误方面能得到一些帮助。我正在与数据库建立一个简单的连接,出于某种原因,它不喜欢我的输入,但我无法理解错误实际发生的位置。任何帮助都将不胜感激-谢谢

我的代码:

  package db;

import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;


public class BankAccount {

private static String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static String DB_URL = "jdbc:mysql://localhost:3306/cs565";
private static String DB_USERNAME = "cs";
private static String DB_PASSWORD = "java";
//  public String name;
//  public String action;
//  public double amount;

// create the table
public static void createTable(){

    try
    {
        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
        Statement stmt = conn.createStatement();

        String sqlDropStatement = "DROP TABLE MYTABLE_TRANSACTIONS";
        try {
            stmt.executeUpdate(sqlDropStatement);
        }
        catch (Exception e)
        {
            System.out.println("No old data found");
        }
        String sqlCreateStatement = "CREATE TABLE MYTABLE_TRANSACTIONS" +
                "(TRANSACTION_ID integer auto_increment primary key," +
                "ACCOUNT_ID varchar(32)," +
                "TRANSACTION_TYPE varchar(32)," + "AMOUNT double)";

        stmt.executeUpdate(sqlCreateStatement);

        String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values ('John Adams', 'initial', 100.00)";
        stmt.executeUpdate(sql);
        sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values ('Benjamin Franklin', 'initial', 200.00)";
        stmt.executeUpdate(sql);
        sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values ('George Washington', 'initial', 300.00)";
        stmt.executeUpdate(sql);
        sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values ('Thomas Jefferson', 'initial', 400.00)";
        stmt.executeUpdate(sql);

        sql = "Select * from MYTABLE_TRANSACTIONS";
        ResultSet rs = stmt.executeQuery(sql);

        //iterate through rows & print
        while (rs.next())
        {
            System.out.printf("TRANSACTION_ID=%2d, ACCOUNT_ID=%8s, TRANSACTION_TYPE=%8s, AMOUNT=%8s\n",
                    rs.getInt("TRANSACTION_ID"),
                    rs.getString("ACCOUNT_ID"),
                    rs.getString("TRANSACTION_TYPE"),
                    rs.getDouble("AMOUNT"));
        }
        //close the connection here 
        stmt.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}// end of create table method




// the deposit method
public static void makeDeposit(String name, String action, double amount){

    try
    {
        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
        Statement stmt = conn.createStatement();

        String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values (name, action, amount)";
        stmt.executeUpdate(sql);

        sql = "Select * from MYTABLE_TRANSACTIONS";
        ResultSet rs = stmt.executeQuery(sql);

        //iterate through rows & update
        while (rs.next())
        {
            System.out.printf("TRANSACTION_ID=%2d, ACCOUNT_ID=%8s, TRANSACTION_TYPE=%8s, AMOUNT=%8s\n",
                    rs.getInt("TRANSACTION_ID"),
                    rs.getString("ACCOUNT_ID"),
                    rs.getString("TRANSACTION_TYPE"),
                    rs.getDouble("AMOUNT"));
        }
        //close the connection here 
        stmt.close();

    } catch (Exception e) {
        e.printStackTrace();
    }           

}//********end of deposit method

// the withdrawal method
public static void makeWithdrawal(String name, String action, double amount){
    try
    {
        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
        Statement stmt = conn.createStatement();

        String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values (name, action, amount)";
        stmt.executeUpdate(sql);

        sql = "Select * from MYTABLE_TRANSACTIONS";
        ResultSet rs = stmt.executeQuery(sql);

        //iterate through rows & update
        while (rs.next())
        {
            System.out.printf("TRANSACTION_ID=%2d, ACCOUNT_ID=%8s, TRANSACTION_TYPE=%8s, AMOUNT=%8s\n",
                    rs.getInt("TRANSACTION_ID"),
                    rs.getString("ACCOUNT_ID"),
                    rs.getString("TRANSACTION_TYPE"),
                    rs.getDouble("AMOUNT"));
        }
        //close the connection here 
        stmt.close();

    } catch (Exception e) {
        e.printStackTrace();
    }//********end of withdrawal method         

}

public static void main(String[] args) {
    //Prompt the user- what would you like to do?
    // withdrawal / deposit / view balance

    String name;
    String action;
    double amount;

    createTable();
    System.out.println("Please enter the name of your account: ");

    Scanner input = new Scanner( System.in );

    name = input.nextLine();

    System.out.println("Welcome " + name);

    System.out.println("What would you like to do? ");

    //Deposit, Withdrawal, check balance
    System.out.println("D= Deposit, W = Withdrawal, B = Show balance ");
    action = input.nextLine();
    //NOTE: fix this to where the letter inserts the entire word into the table
    System.out.println("You chose " + action);
    switch (action) {

    case "D": 

        System.out.println("How much would you like to deposit?");
        amount = input.nextDouble();
        System.out.println("You selected " + amount);

        makeDeposit(name, action, amount);

        break;


    case "W":  
        System.out.println("How much would you like to withdraw? ");
        amount = input.nextDouble();
        System.out.println("You selected " + amount);

        makeWithdrawal(name, action, amount);
        break;


    case "B":  System.out.println("You chose " + action);

    // a print method here using WHERE
    break;


    }// end of switch

    //something to bring back to the top
}
}
错误是:

TRANSACTION_ID= 1, ACCOUNT_ID=John Adams, TRANSACTION_TYPE= initial, AMOUNT=   100.0
TRANSACTION_ID= 2, ACCOUNT_ID=Benjamin Franklin, TRANSACTION_TYPE= initial,     AMOUNT=       200.0
TRANSACTION_ID= 3, ACCOUNT_ID=George Washington, TRANSACTION_TYPE= initial, AMOUNT=       300.0
TRANSACTION_ID= 4, ACCOUNT_ID=Thomas Jefferson, TRANSACTION_TYPE= initial, AMOUNT=       400.0
Please enter the name of your account: 
George Washington
Welcome George Washington
What would you like to do? 
D= Deposit, W = Withdrawal, B = Show balance 
D
You chose D
How much would you like to deposit?
10.00
You selected 10.0
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'name'     in     'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2642)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1647)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1566)
at db.BankAccount.makeDeposit(BankAccount.java:100)
at db.BankAccount.main(BankAccount.java:187)

问题来自
makeDeposit()
方法,特别是以下几行:

String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values (name, action, amount)";
stmt.executeUpdate(sql);
这些值不正确,您可能需要一些名为
name
的变量,而不是实际的字符串名


为了提供更深入的了解,错误是在错误发生之前运行的方法的列表。位于顶部的是最近的一个。因此,一切都从运行
makeDeposit()
方法的
main()
方法开始,然后是调用
stmt.executeUpdated(sql)
之后的一些方法。希望这能解决问题。

问题来自
makeDeposit()
方法,特别是以下几行:

String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values (name, action, amount)";
stmt.executeUpdate(sql);
String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values ('" + name + "', '" + action + "', " + amount + ")";
这些值不正确,您可能需要一些名为
name
的变量,而不是实际的字符串名


为了提供更深入的了解,错误是在错误发生之前运行的方法的列表。位于顶部的是最近的一个。因此,一切都从运行
makeDeposit()
方法的
main()
方法开始,然后是调用
stmt.executeUpdated(sql)
之后的一些方法。希望这能解决问题。

问题来自
makeDeposit()
方法,特别是以下几行:

String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values (name, action, amount)";
stmt.executeUpdate(sql);
String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values ('" + name + "', '" + action + "', " + amount + ")";
这些值不正确,您可能需要一些名为
name
的变量,而不是实际的字符串名


为了提供更深入的了解,错误是在错误发生之前运行的方法的列表。位于顶部的是最近的一个。因此,一切都从运行
makeDeposit()
方法的
main()
方法开始,然后是调用
stmt.executeUpdated(sql)
之后的一些方法。希望这能解决问题。

问题来自
makeDeposit()
方法,特别是以下几行:

String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values (name, action, amount)";
stmt.executeUpdate(sql);
String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values ('" + name + "', '" + action + "', " + amount + ")";
这些值不正确,您可能需要一些名为
name
的变量,而不是实际的字符串名

为了提供更深入的了解,错误是在错误发生之前运行的方法的列表。位于顶部的是最近的一个。因此,一切都从运行
makeDeposit()
方法的
main()
方法开始,然后是调用
stmt.executeUpdated(sql)
之后的一些方法。希望这能把事情弄清楚

String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values ('" + name + "', '" + action + "', " + amount + ")";
名称和操作列需要单引号,因为它们属于varchar类型,而且还需要实际值,因此需要使用“+”号构建查询

/尼克

名称和操作列需要单引号,因为它们属于varchar类型,而且还需要实际值,因此需要使用“+”号构建查询

/尼克

名称和操作列需要单引号,因为它们属于varchar类型,而且还需要实际值,因此需要使用“+”号构建查询

/尼克

名称和操作列需要单引号,因为它们属于varchar类型,而且还需要实际值,因此需要使用“+”号构建查询


/尼克

永远不要在替换中使用简单语句。使用preparedStatement代替[Read:]


不要将普通语句与替换一起使用。使用preparedStatement代替[Read:]


不要将普通语句与替换一起使用。使用preparedStatement代替[Read:]


不要将普通语句与替换一起使用。使用preparedStatement代替[Read:]

在这一行中更改makeDeposit()方法:在本例中,您并没有使用变量,而是将它们用作简单字符串

String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values(name, action, amount)";

在这一行中更改makeDeposit()方法:在本例中,您并没有使用变量,而是将它们用作简单字符串

String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values(name, action, amount)";

在这一行中更改makeDeposit()方法:在本例中,您并没有使用变量,而是将它们用作简单字符串

String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values(name, action, amount)";

在这一行中更改makeDeposit()方法:在本例中,您并没有使用变量,而是将它们用作简单字符串

String sql = "insert into MYTABLE_TRANSACTIONS (ACCOUNT_ID,TRANSACTION_TYPE,AMOUNT) values(name, action, amount)";


谢谢你的解释!谢谢你的解释!谢谢你的解释!谢谢你的解释!我不想违反网站的规则,但谢谢大家的帮助-我很感激!我不想违反网站的规则,但谢谢大家的帮助-我很感激!我不想违反网站的规则,但谢谢大家的帮助-我很感激!我不想违反网站的规则,但谢谢大家的帮助-我很感激!