Say I have created a desktop application in Java to keep notes. I used MySQL for storage. On my computer it connects to database I have created(using my root username and password). But what if I want to distribute my program? Are the other users should have MySQL installed on their system? If they have to isnt tat a problem that I have my MySQL username and password embedded in code?
In general, I am asking how can I make a desktop program in Java which can store data from its users??
Sounds like you want SQLite, There is another SO question here about it.
SQLite as IanNorton mentioned is a good alternative. Other good alternatives are Apache Derby or the H2 database, both providing an embedded (install-free) java database.
Does MySQL have its own embedded version?
Normal "embedded MySQL" is a native code library (libmysqld) that is not really suitable for use with Java. However, there is something called mysql-je that purports to be a Java compatible wrapper. The problem is that it is based on a rather old version of MySQL, and hasn't been updated since 2006.
There are also postings on the MySQL forums about using embedded MySQL with Java, but there's no sign that it is supported.
So I think you'd be better of going with a one of the alternatives; e.g. SQLite, Derby or H2.
No need of multiple installations of MYSQL database if all the machines where you want to access are in a LAN. In that case you can have single database installation and access it from multiple systems using the IP address of the database machine. We can access a remote database through Internet as well, using the IP Address of the machine in which database exists..
Related
I have a MySQL database installed in my Amazon AWS instance (not RDS). The same database is installed in a personal computer, offline.
You have to connect to the amazon database via SSH, it is in a Ubuntu instance.
The online database contains information of 1000 users. The offline versions contain information only for that particular user.
Users use a Java desktop application to feed data into the local database. When they click on the Sync button, the 2 databases should be synced. Remember here that the desktop offline database should "upload" the newly inserted things to the online database while it should "download" new data (if any) related only to the particular user .
The system cannot be a manual way where someone manually turn on a 3rd party application, use putty or connect SSH, configure the databases etc and sync. The system should be embedded to the desktop java application.
I looked into things like SymmetricDS and it is too much complicated, not sure about the SSH access too.
Any idea about how to do this in an easy way? I am also creating a REST API thinking I can handle this manually, but if there is already built system/API I am onto it.
This is very simple and doable. Just use MySQL replication.
MySQL replication
Let me know if you want any further details. I can give you working model of my.cnf as well if required.
Br//
This post is the continue of my previous question in here. So I had a look into how mySQL works with Java, but I noticed that the computer must have a database server to connect to the application. So what will happen when my software is ready and users want to run in a different computers? Can't I save the database file in the directory of the software, so any copy of the program will be connected to its independent database to save and parse data from it?
Just to make it clear, in a part of my software, I needs to keep record of previous interactions. Like a history table.
Would using JSON a better option in this case?
In a real world generally database servers are installed on a machine and softwares are installed on different machine.
We let software know the database configuration like database URL /database Name /username/Passwords etc (through property file or through JNDI configurationS).Then java program can connect to database with the help of JDBC driver.
Note:- one Database Server can Host many databases.
If you want to distribute your software without having dependency on client database. Then I would recommend you to use some inmemory DB.This DB you can embed with your software.(alternatively you can write logic that if client database can't be found then use inMemory DB..something like this).
H2 db is my favorite one and it also supports persistent mode and it support s many DB dialects including MYSQL .
I'm trying to write a code where i need to keep some data in database tables.
I have learned how to use SQL. My problem is that I want this program to run on different computers while having access to the same database.
Any suggestions ?
Thanks
You'll have to run an SQL server on a computer (ie: with mySQL, SQL Server, etc.). You will run queries against the tables that are stored on this database. There are already a lot of resources online with making a database connection to a server.
Just keep database system running in a machine, and instead of pointing to localhost in your JDBC URL, point to the machine's IP Address.
I would personally recommend setting up a script on a host machine and letting it communicate with the database, and have your program communicate with the script. This way, you won't have to keep your database login credentials in your Java program, which could be dangerous.
I am working on a project where the raspberry pi (model B) runs JAVA application to connect to and retrieve data from a Router.
What i want to know is the best approach or the best database that i should use to store that data retrieved from the router. Knowing that i will need to build another android application that should connect to that database (on the raspberry pi) and display that data.
So, what database that is compatible with the java application and the android application?
Also, later on i wish i could run the RPI as a server that enables me to connect to that database from anywhere.
Keeping in mind that:
I am new to Raspberry pi
New to Database
I suggest you to take a look at OrientDb is a NoSql Java graph-document db (you can chose) it support a lot of queries paradigm and an Sql dialect as well (you dont have the join), is fast, light, and support native rest query, i have tested it on raspberry pi (even in distributed multi-master mode on 2/3 raspberry node) and it perform well, the nice thing is that allow you to think in a different way, your data is presented like a java object an exposed you by rest paradigm in Json over http so you can think your client application on client side, using html 5 and jscript framework like angularJs for example (and you can 'deploy' your static resource direcly on the db that work like an extremly light application server)
This answer follows the previous comments. Let's say :
You have your router. Connected to it you have PC (with IP address called IP1) and your RPI with IP2.
On your RPI, I guess you have RaspBian. So with the package manager, you install mysql. You create your desired database and tables.
When using eclipse to access your database for testing purpose, or explore all data, I think you need to provide the jdbc driver, and configure the url of the db. Because you are running eclipse on your pc and you want to access the db hosted by the RPI, you should provide the IP2 address in the url.
Because your Java app will run on RPI, you can set the url to "localhost". See the following link : http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html
So, to sum up, eclipse and java app both need a mysql jdbc driver, configured the right way.
Later, you'll want to access your db through your android app. You'll need to configure your router with port forwarding, to access your db from outside. But this is out of topic. I let you search.
Almost All the Databases are Compatible with JAVA.And Hardly I belive that you will not have such privilege to choose Database while develop real time Application .
Java and Android Both are not different , both are same on a Pillar.There will be no problem because of using Database.
i suggest SQLite as Android uses it natively and it does not need that much of resources as other DBMS like *SQL
I am making an Android application. Since it is so simple, I first thought I could simply eliminate the need for Java application on the server which acts as a middleware. I tried directly connecting to the database using the JDBC driver for MySQL but my program is crashing so I'm not sure if Android "supports" the JDBC driver for MySQL.
So I am thinking of how to implement the application. Basically the application writes some data from a remote MySQL database and retrieves some data from a remote MySQL database.
Do I connect to a Java server program using sockets (or some other method of communication)? Or could I implement a direct connection to the MySQL database from the client application?
I tried directly connecting to the
database using the JDBC driver for
MySQL but my program is crashing so
I'm not sure if Android "supports" the
JDBC driver for MySQL.
Never never never use a database driver across an Internet connection, for any database, for any platform, for any client, anywhere. That goes double for mobile. Database drivers are designed for LAN operations and are not designed for flaky/intermittent connections or high latency.
Do I connect to a Java server program
using sockets (or some other method of
communication)?
It doesn't have to be Java. It just has to be something designed for use over the Internet. As Mr. King's comment suggests, Web services have been used for this for much of the past decade. For Android, REST Web services are probably the easiest to consume, since there is no built-in support for SOAP or XML-RPC. But whether the Web service is implemented in Java, or PHP, or Perl, or SNOBOL, is up to you.
Well, OK, perhaps SNOBOL won't be a viable option. :-)
I know this might be a little late but as I ran into the same problem with a project at school I wanted to share my solution with you as you might profit out of my experiences.
Android is bad for Database-Operations so creating a normal Database-Controller wasn't a thing. Instead I created a Server in Java which handles all Database-related stuff and can also be extended (in my case I used a Feedback-function, too).
The Github-REPO is: https://github.com/Cedced-Bro/Public-Server You can check it out and this is open-source so you can use and contribute to it if you have more ideas to it.
To answer your question more properly: I would strongly suggest to NOT grant all users direct access to your DB as you can run into security issues with malicious users. This was the reason why I created this controller in the first place instead of just a PHP "forwarding"-server.