How to Connect with MySQL Database File( .sql

2019-03-05 02:53发布

问题:

Sorry Maybe this is the second time I am Asking this question because of not getting any answers .

this is my Code

    try{
    File  f = new File("Database.sql");
    if(f.exists()){
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/"+f.getName(),"","");
    }else{
        f.createNewFile();
        System.out.println("file created");
        //also do the connection
    }
    }catch(Exception ex){
       System.out.println(ex.getMessage());
    }

and Here is the error :

Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

The purpose of this question is: I am creating an Application that is for many users, the problem is they don't know anything about computer and I must make it as simple as possible.

So is there any way to connect with MYSQL like MS ACCESS via Directory Path ?

OR is there any other suggestion instead ?

Thanks .

回答1:

Preliminary definitions

"Connect to a MySQL database file" is improper phrasing.

One actually connects to a MySQL database server, which allows access to a database. And so there must be a MySQL server to connect to, more about that below.

Your Database.sql file is a database dump file, that is to say, a dumb (plain text) file. You need a specialized process to extract data from it, after interpreting your SQL queries: a database server.

You might be assuming that one can connect to a file because you are used to working with MS Access files. I am not an expert neither in Java nor in MS Access, but it is my undestanding that accessing a MS Access "database" file from Java actually means connecting to some middleware server, such as this ODBC thingy from Microsoft.

The answer

There is no way to connect to a MySQL database server via a directory path. The only native ways are:

  • TCP
  • Local socket (Unix servers only)
  • Named pipes (Windows servers only)
  • Shared memory (Windows servers only)

There could be some third-party pieces of software around that provide other protocols, which I am not aware of, but they all reduce to the same problem: there must be a MySQL sever running somewhere.

On second thought there is actually one way to access MySQL data without an external MySQL server running: the embedded MySQL server C library. I never tried it myself, but it looks like a viable option for stand-alone applications. I do not believe, however, that it is a desirable solution if you plan to share the same MySQL data across several processes or computers.

The workarounds

Now I understand you are building a Java desktop application based on data that you have in the form of a SQL dump file, probably dumped from a MySQL server. If you want your users to be able to access this data from this Java application, I can see a few options:

  • Install a MySQL server on their computers and load this dump into it. Obvious as hell, but impractical, if I hear you well. Although I guess this installation could certainly be performed automatically by your Java application.

  • Install a MySQL server on a machine of your own, and make it accessible from your users' computers. Major drawback: it requires your users to be connected. You would also probably want to create a distinct database for each user.

  • Use an actually serverless database engine such as SQLite. This seems to be the best option for you. Its SQL syntax is virtually identical to MySQL for usual operations. There must be plenty of JDBC drivers for it. Again, I am not the best advisor in Java, but this one seems to be a serious candidate.



回答2:

AFAIK, you can't plug in a file name in the JDBC url for MySQL. MySQL needs to be running, and you need to connect to it via its TCP port. Something like:

jdbc:mysql://localhost:3306/yourDatabaseName

See http://dev.mysql.com/doc/refman/5.6/en/connector-j-reference-configuration-properties.html