I've downloaded and imported into my project this JDBC driver that supposedly supports Linux (albeit tested only on SUSE Linux).
What I want is to be able to use a .mdf database through Java on Linux. The queries obviously need something to run on, not simply connect to a database - if I am understanding this correctly.
I found a question on SO that seems to have valuable information concerning my issue.
So I was thinking a FreeTDS + JDBC combination. Will queries execute as expected or do I have to go use the database natively, on Windows? The latter basically crushes OS agnosticism that Java provides which I would like avoid, if possible.
The database itself isn't anything fancy, only a few tables - this is merely a school assignment, after all.
I will provide additional information, if needed.
An mdf file can be an old (JET based) Microsoft Access database file, so a JDBC driver for SQL Server, a totally different product, isn't going to help you much. Here on SO there are a couple of posts that explain how to use the JDBC-ODBC bridge to access Access databases via the ODBC driver detour, but since you specifically mention Linux that's not going to help you.
I see two possible (free) approaches:
use the open source jackcess package that allows Java programs across platforms to open, read and write MS Access database
transfer the content of the MSAccess database file to some database that has native Java drivers (that is, most of them that are not MS Access).
However, an mdf file could also be a SQLServer database, but using that database under Linux is also going to be quite tricky, as you'll need some edition of SQL Server to open it - see here for some details on how to "attach" such an mdf file to an installed instance of SQLServer - but to my knowledge there is no edition of SQL Server that runs under Linux. So, unless you can find some Windows machine to run SQLServer on, and then connect to it using the JDBC driver you have both options mentioned before may be valid alternatives (ie, option 1 = copy your data into an MSAccess file and access that file with jackcess or option 2, copy the data into some Linux-tolerant database with a decent JDBC driver and use that)
Some people have been mislead by my question (I am not a native speaker of English, could be that), the database was meant to be run locally (explicitly not on a remote server) which simply cannot happen with the SQL Server + Linux combination. Wine is a possibility, but that is just too much hassle. So, the solution is either to simply use SQL Server on Windows or use an alternative cross-platform RDBMS like MySQL.
Nevertheless, I'll accept fvu's edited answer and would like to thank other users for the time they've invested in their own answers.
Related
I need to create a simple Java application that connects to a local database file, and will run on a mac.
I've figured that JDBC is a good option, but what file format/drivers should I use?
Is .MDB files a possibility?
Thanks for any help!
For a small DB I would suggest using a DB written in Java. The DB's below or all
< 2mb. Keeping it in java means it is easy to transfer to Windows / Linux if need be.
Possible DB's include:
H2 - H2 has a mixed mode where the first time the DB is opened it is op
Advantages:
Mixed Mode
Only a couple of Files
has built-in SQL
HSQLDB - Version HSQLDB 1.80 is the smallest jar of the three (by a big margin)
The 2.* jars are similar in size to H2
Advantages:
Small size (Version 1.80)
Only a couple of Files
Apache Derby
All three offer Server and Embedded mode, H2 has mixed mode as well. All three are open source.
Use Apache Derby embedded in your application. This keeps it simple while still using standard JDBC.
H
Is .MDB files a possibility?
It could be, via a library like UCanAccess. However, using an Access database (.mdb or .accdb) would only be advisable if there was some other compelling reason to do so, e.g., to take a copy of the database file and use it with some other application that requires an Access database.
Otherwise, one of the suggestions from the other answers would probably be a better choice.
i was wondering, why does it have to be so complex to develop a swing application that works with a DBMS on java?
I would expect it to be as simple as it is to develop an android app with DBMS, which is pretty much straight forward with the android.database.sqlite package...
Specifically, i would like to know why would it make you connect to the DBMS with URL's and have to install so many background complicated things just to get it to start working?
and do you guys know of a java package that works similiar to the android package for DBMS? or is there a way to include this package and work with it in a regular java project?
I think you question is too generic.
You can use SQLite in Java SE/Java EE in various ways.
For example - have you taken a look here?
You should understand that the standard way to access relational DB is via JDBC.
Jdbc provides you an abstraction API for database access, and since it supports many DB vendors,
It has for example to support loading the property JDBC driver, which provides a vendor-specific implementation for the DB vendor in use (for example - mysql and oracle DB have different JDBC drivers).
As far as I know, this is not the case with Android - which currently has a single "DB provider" - SQLite, so in case of Android development you can skip the "Vendor driver loading" as you have one vendor.
However, there are various frameworks that allow you to simplify the work with relational database, such as spring-jdbc.
Your java program is possibly going to run on a windows, linux, apple (or other) box. It has the ability to connect to mysql, postgresql, sql server, oracle or sqllite. It needs to be able to connect under all those operating systems potentially to all those databases. This flexibility comes at a cost.
Your android app is going to run on the android os with the sqllite database. This can be baked into the os, making life easy for you. But that app won't run on iOS or WinPhone.
Hi I have this little big problem I have a legacy VB6 desktop application that connects to a MS Access database hosted in a local Ubuntu server machine that is being shared to the LAN as a SMB share and I have a Tomcat web application hosted in a Windows based VPS, these are
Requirements
Read information from the MS Access db and show it in the webapp (On URL visit and almost real-time accuracy).
Update the MS Access db with information received through the website.
Facts
20Mb < db size
Shared with 15 ~ 25 users.
Constant local update and querying.
The file size is small because It is being truncated as it grows tool large( > 100Mb)
Now I know that the arquitecture isn't the best and that MS Access is at its limits, a migration to full Java and MySQL is on the way, but it's going to take a long time....in the meantime I need a way to implement that feature, here are my options.
Option 1
Access the db in ubuntu server through a VPN directly from the webapp.
Cons
Is it possible?.
Slow connection.
May lock the db MORE frequently as it happens quite often locally.
Option 2
Have a local webapp run in Ubuntu server that exposes the db as a REST API, so updates would be handled by the local webapp.
Cons:
Hard to use MS Access in a UNIX environment, looking at unixODBC and FreeTDS, but so far I haven't been able to use it.
Well, writing the whole app and securing the server.
Option 3
Any suggestions?
Thank you if you read this far, any help is really appreciated.
Unless I missed something in your description, I think you might be confusing the differences between an API and a library. Basically, ODBC is an API which is implemented as a library and commonly used on Windows based machines through additional data access libraries like ADO and ADO.NET. I mention this since you referred to unixODBC as a solution. It would not be a complete solution as there is more to it than just the API alone.
In simple terms, the database file you created with Microsoft Access is a .MDB flat file database (ok, there is a little bit more to it, but in terms of treating it as a database, that is all that matters here). If you know how the structure of the .MDB file works, you could write your own library that reads/writes to it. Of course, this is not trivial and on the Windows platforms, this is provided for you by Microsoft using the libraries included in the OS. This is also referred to as a JET driver and database. JET is the database format that the .MDB file implements and is used by Access and other applications via the correspondingly named JET drivers.
So to find an equivalent option for non-Windows platforms, you need some sort of library that knows how to natively read/write to the .MDB file directly. If you are trying to use the .MDB file at the same time from an Access application, then you need to make sure the library you choose supports simultaneous mutli-user access to the database.
In a quick search, there do appear to be some solutions that I could find. The first one appears that it might have some functional limitations. The second appears to be a commercial product.
MDB Tools
Easysoft JET/Access Driver
Suppose I created a standalone application in java and distributed it through my website.
What I need to know is what is the ideal Database solution I can use so that all the users can use the application without installing anything extra.
For example, if I use SQL server or MySql database, the downloader will need those installed so that I can dump my database on it. Another solution I see is to use Database file like Microsoft Access .mdb file. But that too will need Microsoft Office installed on the client. XML files are platform independent but anyone can open and change them.
What is the solution used by most of the applications?
H2 is a very potent candidate for your need. We use it as a default RDBMS in all our demo applications and also for db-driven unit testing.
You could use an embedded database. There are hundreds for Java some which use SQL and many which don't. Any database you use, you may want the users to be able to maintain, so users editing the data may be a good thing.
You could consider Derby as it ships with Java.
I would use plain flat files which are CSV formatted unless you have a more specific requirement. e.g. you can load and edit them in excel/spreadsheet editor/text editor.
H2 is the successor of HSQLDB (same developer). It is not only one of the finest embedded DBs for JAVA, it is also free, even for commercial use. It's great with hibernate and comes with with a powerful web-interface (you can start it by running the h2 jar file). Additionally there is the possibility to encrypt you database (AES). We use that feature for getting some security aspects right with some of our projects.
check javadb. it is easy and can be redistributed
Firebird can do this : there is an embedded version.
There is some good java drivers
Using MDB files on Windows doesn't require any additional installation requirements such as Microsoft Office. DAO and ADO have come with the Windows OS since Windows 2000.
i am not clear about steps/configuration details about how i can embed mysql in a Java desktop application so that it(application) can be installed on any machine through a single executable file and doing so sets up database and also provides an exe to run the app.Till now i have built my app using netbeans and i have used mysql to set up database.plz guide me further.
MySQL isn't an embedded database - the only JAR related to it is the JDBC driver. It requires a installation process, which might be able to be scripted via Java, but the process will definitely function outside of the Java application you intend it to support. Meaning, you can turn off your Java application but the MySQL service/daemon will still be running.
Only the libmysqld is embeddable.
There are embedded databases - SQLite, Firebird - and embedded databases made in Java - HSQL, Derby/(can't remember what it was called before). I believe SQL Server Compact Edition is embeddable, while SQL Server Express/MSDE is not. I don't know if Oracle has an embeddable version....
I would strongly recommend H2. It is a very fast embedded database written in Java and I've found it easier to use than some of the others mentioned such as HSQL.
Edit:
On the H2 website, you can see a speed comparison of H2 vs Derby, HSQL, MySql, etc...
Here's information on how to backup the database.
While theoritcaly possable it would not be easy. The standard MySql distributions assume you want to set up a general purpose database server with separate from the client applications cominicating via odbc etc.
You may be better looking at the "pure java" options like HSQL or JavaDB which are designed to be embedded in a java application, and need little or no "setup".
Another possibility is Sqlite which only needs a single binary plus the sqljbbc jar file. This is again designed from scratch to be embedded inside an application and requires zero admin apart from allocating a file for the database.
Take a look at http://dev.mysql.com/doc/refman/5.0/en/connector-mxj.html. I do not remember the exact details but I was able to embed MySQL db in desktop application without user needing to install it separately.
The key class is com.mysql.management.MysqldResource.
Here is the example, http://dev.mysql.com/doc/refman/5.0/en/connector-mxj-configuration-java-object.html
The mysql-connector-mxj-gpl-db-files.jar file contains MySQL installation files for all the platforms. If you know which is your target platform, you can strip other platform versions from jar, to reduce download size for end user.
If you want an embedded database with java, then use one written in Java designed to be embedded. I know Apache Derby Can be embedded and apparently H2 too.
How big amount of data dó you need the database to handle?