Java无法连接到localhost上的MariaDB数据库

Java无法连接到localhost上的MariaDB数据库,java,database,jdbc,mariadb,Java,Database,Jdbc,Mariadb,我正在尝试连接到本地主机上的MariaDB数据库(使用xampp)。我第一次连接时,连接就建立起来了,我设法用两个字段“username”“password”创建了一个表。此后,当我尝试执行任何其他操作时,连接将变为null,并且我无法插入或执行任何查询 import java.sql.*; class MyDatabase { private Connection conn; private PreparedStatement psAddPerson; MyDat

我正在尝试连接到本地主机上的MariaDB数据库(使用xampp)。我第一次连接时,连接就建立起来了,我设法用两个字段“username”“password”创建了一个表。此后,当我尝试执行任何其他操作时,连接将变为null,并且我无法插入或执行任何查询

import java.sql.*;

class MyDatabase {
    private Connection conn;
    private PreparedStatement psAddPerson;


    MyDatabase(String host, String user, String password) throws Exception {
        Connection conn = DriverManager.getConnection("jdbc:mariadb:" + host,
                user, password);
        psAddPerson = null;
    }

    public void addPerson(String username, String password) {
        try{
            if( psAddPerson == null ){
                String sqlAddPerson = "insert into users (usern, pass) values (?,?)";
                psAddPerson = conn.prepareStatement(sqlAddPerson);
            }
            psAddPerson.setString(1, username);
            psAddPerson.setString(2, password);
            psAddPerson.executeUpdate();
        } catch (SQLException e) {
            System.err.println("Couldn't create add person");
            e.printStackTrace();
        }
    }
}

public class Main {
    public static void main(String[] args) {
        String host = "//localhost:3306/test";
        String user = "root";
        String pass = "";
        MyDatabase newDb = null;
        try {
            newDb = new MyDatabase(host, user, pass);
        } catch (Exception e) {
            e.printStackTrace();
        }

        String username = "admin";
        String password = "password";
        if (newDb != null) {
            newDb.addPerson(username, password);
        }
    }
}
尝试执行以下代码时,此代码会生成NullPointerException:

psAddPerson = conn.prepareStatement(sqlAddPerson);
我希望能够执行对本地主机数据库的查询

来自服务器类型的phpMyAdmin的图片:


谢谢

修复很容易更改:

Connection conn = DriverManager.getConnection("jdbc:mariadb:" + host,
            user, password);
致:


解决方案很容易更改:

Connection conn = DriverManager.getConnection("jdbc:mariadb:" + host,
            user, password);
致:

更改此项:

Connection conn=DriverManager.getConnection(“jdbc:mariadb:+host,user,password”)

据此:

conn=DriverManager.getConnection(“jdbc:mariadb:+host,user,password”)

这样,您将实例化实例变量,而不是构造函数中的局部变量

希望这有帮助更改此选项:

Connection conn=DriverManager.getConnection(“jdbc:mariadb:+host,user,password”)

据此:

conn=DriverManager.getConnection(“jdbc:mariadb:+host,user,password”)

这样,您将实例化实例变量,而不是构造函数中的局部变量


希望这有帮助稍微调整一下,然后更改此设置:

Connection conn = DriverManager.getConnection("jdbc:mariadb:" + host, user, password);
对此:

conn = DriverManager.getConnection("jdbc:mariadb:" + host, user, password);

稍微调整一下并更改此设置:

Connection conn = DriverManager.getConnection("jdbc:mariadb:" + host, user, password);
对此:

conn = DriverManager.getConnection("jdbc:mariadb:" + host, user, password);

@YCF_L完成了,但没有太大变化。您正在构造函数中创建连接实例,需要初始化实例变量
conn
Ahh好的,谢谢@Eleazarenriques当然,这很重要,实例变量总是空的,因为您正在构造函数中实例化一个局部变量。@YCF_L完成了,但变化不大。.您正在构造函数中创建一个连接实例,您需要初始化实例变量
conn
Ahh好的,谢谢@当然,这很重要,实例变量总是空的,因为你在构造函数中实例化一个局部变量。谢谢:)你比另一个人快,所以会接受你的答案好!:-)编码时间快乐!谢谢:)你比其他人快,所以我会接受你的回答好的!:-)编码时间快乐!