<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>database | www.valeriofinazzo.it</title>
	<atom:link href="http://www.valeriofinazzo.it/wordpress/tag/database/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.valeriofinazzo.it/wordpress</link>
	<description>Il sito dell&#039;ingegnere Valerio Finazzo</description>
	<lastBuildDate>Sun, 27 Jul 2014 15:06:02 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.3</generator>
	<item>
		<title>ANDROID TUTORIAL &#8211; 5 – INTEGRARE UN DATABASE</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/07/android-tutorial-5-integrare-un-database/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 26 Jul 2014 14:47:34 +0000</pubDate>
				<category><![CDATA[ANDROID]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[database]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=374</guid>

					<description><![CDATA[<p>In Android molte applicazioni necessitano di un database per conservare le informazioni per un uso successivo. Realizzeremo insieme un crud, ovvero un app che consente le tipiche operazioni di gestione di una entità: creazione, ricerca, aggionrnamento e cancellazione. Il database di riferimento è SQLite, il package offerto da android è android.database.sqlite. Per poter accedere al nostro &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/07/android-tutorial-5-integrare-un-database/" class="more-link">Continua la lettura di <span class="screen-reader-text">ANDROID TUTORIAL &#8211; 5 – INTEGRARE UN DATABASE</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/07/android-tutorial-5-integrare-un-database/">ANDROID TUTORIAL – 5 – INTEGRARE UN DATABASE</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">In Android molte applicazioni necessitano di un database per conservare le informazioni per un uso successivo. Realizzeremo insieme un crud, ovvero un app che consente le tipiche operazioni di gestione di una entità:<br />
creazione, ricerca, aggionrnamento e cancellazione.<br />
Il database di riferimento è <a title="sqlite" href="http://www.sqlite.org/" target="_blank">SQLite</a>, il package offerto da android è <a title="android.database.sqlite" href="http://developer.android.com/reference/android/database/sqlite/package-summary.html" target="_blank">android.database.sqlite</a>.</p>
<p style="text-align: justify;">Per poter accedere al nostro database occorre estendere la classe SQLiteOpenHelper, che prevede l&#8217;implementazione dei metodi creazione del database.</p>
<p></p><pre class="crayon-plain-tag">public class DatabaseHelper extends SQLiteOpenHelper {

public static final String DB = "gestoremarket";
public static final int SCHEMA_VERSION = 1;
public static final String DATABASE_NAME = "gestoremarket.db";

public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, SCHEMA_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {}

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {}

}</pre><p></p>
<p style="text-align: justify;">Il costruttore prevede la creazione di un database con una determinata versione e sono previsti i metodi che verranno lanciati alla creazione del database e/o al suo aggiornamento., All&#8217;interno dei metodi è possibile lanciare degli script sql per aggiornare il database.</p>
<p style="text-align: justify;">A questo punto dobbiamo definire la classe per la gestione della nostra tabella, tale classe implementa l&#8217;interfaccia BaseColumns, che prevede la presenza di una primary key _ID (tale approccio non è obbligatorio, ma è consigliato da Google per uno sviluppo più armonico)</p>
<p style="text-align: justify;">Nel nostro caso prevediamo una classe così fatta</p>
<p></p><pre class="crayon-plain-tag">public class MarketTable implements BaseColumns {

public static String TABLE_NAME = "MARKET";
public static String NAME = "NAME";
public static String CITY = "CITY";
public static String ADDRESS = "ADDRESS";
public static String CANCELLATO = "CANCELLATO";

public static String[] COLUMNS = new String[] {_ID, NAME, CITY, ADDRESS, CANCELLATO };

}</pre><p></p>
<p style="text-align: justify;">Non resta che definire la classe DAO responsabile dei metodi di lettura e scrittura sul nostro db</p>
<p></p><pre class="crayon-plain-tag">public class MarketDao {

private DatabaseHelper databaseHelper;

public MarketDao(Context context) {
databaseHelper = new DatabaseHelper(context);
}

public List&lt;Market&gt; getAll() {
 
SQLiteDatabase database = databaseHelper.getReadableDatabase();
 
 List&lt;Market&gt; list = new ArrayList&lt;Market&gt;();
 
 String sql = 
 String.format("select " +
 "market._id, " +
 "market.name, " +
 "market.city, " +
 "market.address " +
 "from market " +
 "where market.cancellato = 0") ;
 Log.i(DatabaseHelper.DATABASE_NAME, sql); 
 Cursor cursor = database.rawQuery(sql, null);
 
 cursor.moveToFirst();
 while (!cursor.isAfterLast()) {
 Market market = getMarket(cursor);
 list.add(market);
 cursor.moveToNext();
 }
 
 cursor.close();
 
 database.close();
 
 return list;
}

public void delete(Long id) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
String sql = 
String.format("update market " +
"set cancellato = 1 " +
" where _id = %d ", id) ;
Log.i(DatabaseHelper.DATABASE_NAME, sql);
database.execSQL(sql);
database.close();
}

public void save(Market item) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues contentValues = creaContentValues(item);
if (item.getId()==null) {
long insertOrThrow = database.insertOrThrow(MarketTable.TABLE_NAME, null, contentValues);
item.setId(insertOrThrow);
} else
database.update(MarketTable.TABLE_NAME, contentValues, " _id = " + item.getId(), null);
database.close();
}

private ContentValues creaContentValues(Market item) {
ContentValues contentValues = new ContentValues();
contentValues.put(MarketTable._ID, item.getId());
contentValues.put(MarketTable.NAME, item.getName());
contentValues.put(MarketTable.CANCELLATO, item.getCancellato());
contentValues.put(MarketTable.CITY, item.getCity());
contentValues.put(MarketTable.ADDRESS, item.getAddress());
return contentValues;
}
}</pre><p></p>
<p style="text-align: justify;">Dall&#8217;analisi della classe si vede come la classe Helper permetta di accedere al database in lettura e/o scrittura tramite i metodi</p>
<p></p><pre class="crayon-plain-tag">SQLiteDatabase database = databaseHelper.getWritableDatabase();</pre><p></p><pre class="crayon-plain-tag">SQLiteDatabase database = databaseHelper.getReadableDatabase();</pre><p></p>
<p style="text-align: justify;">Ottenuta l&#8217;istanza del database la classe mette a disposizione dei metodi per la gestione dei dati, che permettono di eseguire del codice sql oppure tramite l&#8217;uso di classi container, tipo ContentValues, che consentono l&#8217;interazione con il database anche con una limitata conoscenza di sql.</p>
<p style="text-align: justify;">Buona sperimentazione.</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F07%2Fandroid-tutorial-5-integrare-un-database%2F&amp;linkname=ANDROID%20TUTORIAL%20%E2%80%93%205%20%E2%80%93%20INTEGRARE%20UN%20DATABASE" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F07%2Fandroid-tutorial-5-integrare-un-database%2F&amp;linkname=ANDROID%20TUTORIAL%20%E2%80%93%205%20%E2%80%93%20INTEGRARE%20UN%20DATABASE" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F07%2Fandroid-tutorial-5-integrare-un-database%2F&amp;linkname=ANDROID%20TUTORIAL%20%E2%80%93%205%20%E2%80%93%20INTEGRARE%20UN%20DATABASE" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F07%2Fandroid-tutorial-5-integrare-un-database%2F&amp;linkname=ANDROID%20TUTORIAL%20%E2%80%93%205%20%E2%80%93%20INTEGRARE%20UN%20DATABASE" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F07%2Fandroid-tutorial-5-integrare-un-database%2F&amp;linkname=ANDROID%20TUTORIAL%20%E2%80%93%205%20%E2%80%93%20INTEGRARE%20UN%20DATABASE" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F07%2Fandroid-tutorial-5-integrare-un-database%2F&#038;title=ANDROID%20TUTORIAL%20%E2%80%93%205%20%E2%80%93%20INTEGRARE%20UN%20DATABASE" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/07/android-tutorial-5-integrare-un-database/" data-a2a-title="ANDROID TUTORIAL – 5 – INTEGRARE UN DATABASE"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/07/android-tutorial-5-integrare-un-database/">ANDROID TUTORIAL – 5 – INTEGRARE UN DATABASE</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
